我正在开发一个项目,我必须创建一个Qt信号槽连接,从类的构造函数到它在里面初始化的类。这就是代码的样子。我希望下面提到的连接都能正常工作,但从输出结果可知,只有连接#1有效。 我的问题是如何使#2连接工作!
A类
class classA :public QWidget{
Q_OBJECT
public:
classA(){
emit this->demoSignalA();
}
signals:
void demoSignalA();
public slots:
void demoSlotA(){qDebug()<<"SIGNAL FROM CLASS B"}
};
B类
class classB :public QWidget{
Q_OBJECT
public:
classB(){
classA *a = new classA;
connect(this, SIGNAL(demoSignalB()), a, SLOT(demoSlotA())); //WORKS
connect(a, SIGNAL(demoSignalA()), this, SLOT(demoSlotB())); //DOESN'T WORK
emit this->demoSignalB();
}
signals:
void demoSignalB();
public slots:
void demoSlotB(){qDebug()<<"SIGNAL FROM CLASS A";}
};
主要
int main(int argc, char *argv[]){
QApplication a(argc, argv);
...
...
classB b; //INVOCATION INITIATED
return a.exec();
}
输出
SIGNAL FROM CLASS B
答案 0 :(得分:6)
如果您按照代码的顺序进行操作,那么在您调用
时应该清楚emit this->demoSignalA();
在classB构造函数的第一行中,尚未建立连接。如果尚未建立连接,则在发出信号时不会执行插槽。
在连接完成后,你应该在classB构造函数中发出两个信号。
(原则上,最好不要在完成构造函数之后才开始发出信号,但这在这里并不重要)