我需要将按钮连接到另一个类的成员函数。在这里,类的代码:作为Qt插槽的成员函数
int g_switch_value = 0;
int filterInt = 0;
int lastfilterInt = -1;
void MoyenEtMedian::switch_callback(int position, void* object)
{ MoyenEtMedian* moyetmed = (MoyenEtMedian*) object;
filterInt = position;
}
void MoyenEtMedian::exec(void)
{
const char* name = "Filtres";
IplImage* img = cvLoadImage("image.png");
IplImage* out = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
cvNamedWindow(name, 1);
cvShowImage(name, out);
// Create trackbar
cvCreateTrackbar2("Filtre", name, &g_switch_value, 1, &MoyenEtMedian::switch_callback, this);
while(1) {
switch(filterInt){
case 0:
cvSmooth(img, out, CV_BLUR, 7, 7);
break;
case 1:
cvSmooth(img, out, CV_MEDIAN, 7, 7);
break;
}
if(filterInt != lastfilterInt){
cvShowImage(name, out);
lastfilterInt = filterInt;
}
if(cvWaitKey(15) == 27)
break;
}
cvReleaseImage(&img);
cvReleaseImage(&out);
cvDestroyWindow(name);
}
这里的GUI的(使用Qt Designer创建)在.cpp:
FenPrincipale::FenPrincipale(QWidget *parent) :
QWidget(parent),
ui(new Ui::FenPrincipale)
{
ui->setupUi(this);
QObject::connect(ui->bMoyMed,SIGNAL(clicked()),MoyenEtMedian,SLOT(MoyenEtMedian::exec()));
}
我得到了“不在此范围declard “MoyenEtMedian错误,即使直接传递。
UPDATE:#include missing。 “未在此范围内声明”问题已解决。
不过,我还有一个:
“之前预期主表达式 '' 令牌” 有关:
QObject::connect(ui->bMoyMed,SIGNAL(clicked()),MoyenEtMedian,SLOT(exec()));
我已经宣布在moyenetmedian.h文件SLOT:
#ifndef MOYENETMEDIAN_H
#define MOYENETMEDIAN_H
#include "ui_fenprincipale.h"
class MoyenEtMedian
{Q_OBJECT
public:
MoyenEtMedian();
static void switch_callback(int position, void*);
public slots :
void exec(void);
};
#endif // MOYENETMEDIAN_H
连接的第三个参数应该是指向接收器类的指针。另外我不认为你需要在SLOT宏中使用类名。 – dowhilefor