c++ - 插槽在 QT 应用程序中未接收到信号

标签 c++ multithreading qt signals-slots

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

工作线程:

[Header]
signals:
    void writeComplete(void);

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

主窗口子类:

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();

但这不是:

主窗口子类: [标题] 公共(public)插槽: 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();
}

最佳答案

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

关于c++ - 插槽在 QT 应用程序中未接收到信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11048477/

相关文章:

c# - 在 C# 中将多个 Parallel.ForEach 合并为一个

c++ - QPluginLoader 实例总是返回 null

c++ - 声明 3D vector 的大小

c++ - 将整数映射到彩虹光谱中的颜色

c++ - 无法在 direct2d 项目中初始化 IWICImagingFactory

Java:使用线程检查条件

c++ - 预分配 unordered_map 的线程安全

c++ - Qt Creator 项目不会在 Windows 上构建(链接器错误)

macos - X11。找不到符号 : _CGLGetCurrentContext

c++ - C++中的静态和动态内存分配