QT中鼠标响应函数setMouseCallback类型不匹配问题解决

本文介绍如何在QT中正确设置鼠标回调函数,通过自定义转换函数mouseWrapper,实现从静态回调函数到成员函数的调用,使得可以利用MainWindow类的方法响应鼠标事件。

QT中调用void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0 )会调用静态回调函数void onMouse( int event, int x, int y, int, void* ),

但我需要响应onMouse回调函数时需要调用ui,此时会发生静态回调函数不能响应mainWindow非静态(我也不太理解),也就是需要将

void onMouse( int event, int x, int y, int, void* ),改为

void MainWindow::onMouse( int event, int x, int y, int, void* )

直接上程序:

头文件中添加:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

//#define WINDOW "captureImg1"

#include <QMainWindow>
#include<QFileDialog>
#include<opencv2/opencv.hpp>
#include<iostream>
#include<QTimer>
#include <QImage>
#include <stdlib.h>

using namespace cv;
using namespace std;

void mouseWrapper( int event, int x, int y, int flags, void* param );

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void on_mouse_1(int EVENT, int x, int y, int flags, void* userdata);//注意要放到public中;

private slots:
源文件中添加转换函数:

void mouseWrapper( int event, int x, int y, int flags, void* param )
{
    MainWindow * mainWin = (MainWindow *)(param);
    mainWin->on_mouse_1(event,x,y,flags,param);
}

最后鼠标响应函数可改为:

    setMouseCallback("WINDOW", mouseWrapper,&g_srcImage_1);//注意g_srcImage_1是我自己需要输入的值。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值