我需要將按鈕連接到另一個類的成員函數。在這裏,類的代碼:作爲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