【问题标题】:Slot not receiving Signal in QT application插槽在 QT 应用程序中没有接收到信号
【发布时间】:2023-04-04 00:52:01
【问题描述】:

我有一个奇怪的情况,我有一个工作线程在做这件事,然后发出一个信号来回调 GUI 线程以关闭一个对话框。有人可以解释一下为什么会这样吗:

工作线程:

[Header]
signals:
    void writeComplete(void);

[Source]
void startWorkerThread()
{
    // do some stuff in boost::thread
    emit writeComplete();
}

MainWindow 子类:

burnDialog = new QProgressDialog("Writing to disc", "", 0, 0);
burnDialog ->setCancelButton(0);
QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), burnDialog, SLOT(close()) );
QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), this, SLOT(close()) );
burnDialog->open();
discHandler->startWorkerThread();

但这不是:

MainWindow 子类: [标题] 公共插槽: void closeWithDialog(void);

[Source]
burnDialog = new QProgressDialog("Writing to disc", "", 0, 0);
QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), this, SLOT(closeWithDialog()) );
burnDialog ->setCancelButton(0);
burnDialog->open();
discHandler->startWorkerThread();

void closeWithDialog()
{
    burnDialog->close();
    close();
}

【问题讨论】:

标签: c++ multithreading qt signals-slots


【解决方案1】:

感觉像...我没有将Q_OBJECT 放在头文件中。我假设子类继承QMainWindow 的事实,Q_OBJECT 接口也将被隐式继承。但它不是......无论如何,谢谢你们的帮助!

【讨论】:

    【解决方案2】:

    这是不起作用情况下的故障线路:

    QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), burnDialog,
                      SLOT(closeWithDialog()) );
    

    您将SLOT 分配给burnDialog 实例,这意味着closeWithDialog() 方法必须属于QProgressDialog 类。 QProgressDialog 没有这样的方法。您应该检查您的控制台是否有以下消息:

    Object::connect: No such slot QProgressDialog::closeWithDialog()
    

    把上面的故障线改成下面的:

    QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), this,
                      SLOT(closeWithDialog()) );
    

    【讨论】:

    • 谢谢你赶上那个垃圾。不幸的是,这只是 Ctrl+C 和 Ctrl+V 的错误:p。在实际代码中,我确实有QWidget::connect( discHandler.get(), SIGNAL(writeComplete()), this, SLOT(closeWithDialog()) );
    • 哦,太好了.. :) 好吧,你应该马上EDIT 这个问题。另外,我希望您检查一下您没有在控制台中收到任何 connect failed 消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多