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