Qt信号槽混淆

3

我正在处理一个项目,需要从类的构造函数创建一个Qt信号-槽连接到其初始化的类内部。代码如下所示。我希望下面提到的两个连接都能起作用,但是从输出结果来看,只有连接#1起作用。 我的问题是如何使连接#2工作!

class A

class classA :public QWidget{
    Q_OBJECT
public:
    classA(){
             emit this->demoSignalA();
            }
signals:
    void demoSignalA();
public slots:
    void demoSlotA(){qDebug()<<"SIGNAL FROM CLASS 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个回答

6
如果您按照代码的顺序进行跟踪,那么应该清楚地看到,在调用

时,它会执行一些操作。
emit this->demoSignalA();

在classB构造函数的第一行,连接还没有建立。如果连接还没有建立,那么当您发出信号时,槽将不会被执行。
应该在classB构造函数中建立连接后再发出两个信号。
(原则上,最好在完成构造函数后才开始发出信号,但这里并不重要)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接