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