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

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 
#include
#include
#include
#include
#include 
#include 
 
  
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是我自己需要输入的值。

你可能感兴趣的:(QT中鼠标响应函数setMouseCallback类型不匹配问题解决)