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

来源:互联网 发布:网络犯罪的危害 编辑:程序博客网 时间:2024/06/06 12:34

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

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

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