【问题标题】:Qt signal-slot confusionQt 信号槽混淆
【发布时间】:2013-10-18 01:07:16
【问题描述】:

我正在做一个项目,我必须创建一个从类的构造函数到它在内部初始化的类的 Qt 信号槽连接。这就是代码的样子。我希望下面提到的两个连接都可以工作,但是从输出的建议来看,只有 connection#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

【问题讨论】:

    标签: qt qtcore qt-signals


    【解决方案1】:

    如果你按照代码的顺序,应该清楚在你调用的地方

    emit this->demoSignalA();
    

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

    您应该在建立连接后在 classB 构造函数中发出这两个信号。

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

    【讨论】:

      猜你喜欢
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 2021-02-12
      • 2017-02-23
      相关资源
      最近更新 更多