Kil*_*tch 3 qt qt-signals qtcore
我正在开发一个项目,我必须创建一个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"}
};
Run Code Online (Sandbox Code Playgroud)
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";}
};
Run Code Online (Sandbox Code Playgroud)
主要
int main(int argc, char *argv[]){
QApplication a(argc, argv);
...
...
classB b; //INVOCATION INITIATED
return a.exec();
Run Code Online (Sandbox Code Playgroud)
}
OUTPUT
SIGNAL FROM CLASS B
Run Code Online (Sandbox Code Playgroud)
如果您按照代码的顺序进行操作,则应该清楚在您调用的位置
emit this->demoSignalA();
Run Code Online (Sandbox Code Playgroud)
在classB构造函数的第一行中,尚未建立连接.如果尚未建立连接,则在发出信号时不会执行插槽.
在classB构造函数中,您应该在建立连接后发出两个信号.
(作为一个原则问题,在你完成构造函数之前最好不要开始发出信号,但这在这里并不重要)