错误提示:
error: no matching member function for call to ‘connect’
错误呈现:
源代码:
//ctrlbtn.cpp
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
#include <QKeyEvent>
#include "ctrlbtn.h"
CtrlBtn::CtrlBtn(QObject *parent)
: QObject{parent}
{
}
CtrlBtn::~CtrlBtn(){}
void CtrlBtn::Control(){
bciinterface.close();
ctrlinterface.show();
connect(ctrlinterface.Open,&QPushButton::clicked,&bciinterface,&QWidget::show);
connect(ctrlinterface.Close,&QPushButton::clicked,&bciinterface,&QWidget::close);
connect(ctrlinterface.Quit,&QPushButton::clicked,this,[=](){
ctrlinterface.close();
bciinterface.close();
});
connect(ctrlinterface.Run,&QPushButton::clicked,this,[=](){
static bool freqEnableFlag = false;
freqEnableFlag = !freqEnableFlag;
bciinterface.Targets->setEnabelWave(freqEnableFlag);
if(ctrlinterface.Run->text()=="运行")
{
ctrlinterface.Run->setText("停止");
}
else
{
ctrlinterface.Run->setText("运行");
}
});
connect(bciinterface,&BciInterface::KeyCtrl,this,[=](){ //错误提示!
if(ctrlinterface.isHidden())
{
ctrlinterface.show();
}
else
{
ctrlinterface.close();
}
});
}
错误原因:
connect最常用的一般形式为:
connect(sender,signal,receiver,slot);
其中sender和receiver需为某个对象的地址,而源代码中信号发出的对象为一个对象,而非地址。
connect(&bciinterface,&BciInterface::KeyCtrl,this,[=](){ //改正
if(ctrlinterface.isHidden())
{
ctrlinterface.show();
}
else
{
ctrlinterface.close();
}
});
修改方法:
在bciinterface前加取址符&即可。