Qt信号槽混淆

时间:2013-10-18 01:07:17

标签: qt qtcore qt-signals

我正在开发一个项目,我必须创建一个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

1 个答案:

答案 0 :(得分:6)

如果您按照代码的顺序进行操作,那么在您调用

时应该清楚
emit this->demoSignalA();

在classB构造函数的第一行中,尚未建立连接。如果尚未建立连接,则在发出信号时不会执行插槽。

在连接完成后,你应该在classB构造函数中发出两个信号。

(原则上,最好不要在完成构造函数之后才开始发出信号,但这在这里并不重要)