繁体   English   中英

Qt / Windows:在全局范围的 object 的构造函数中连接信号和插槽时崩溃

[英]Qt / Windows: crash when connecting a signal and slot in the constructor of a globally scoped object

当我在 Windows 上的 Qt Creator 中编译并运行以下程序时,它会崩溃:

测试对象.h:

#include <QObject>

class TestObject : public QObject {
    Q_OBJECT
public:
    TestObject(QObject *parent = nullptr);
signals:
    void signal();
public slots:
    void slot();
};

测试对象.cpp:

#include "TestObject.h"

TestObject::TestObject(QObject *parent) : QObject(parent) {
    connect(this, &TestObject::signal, this, &TestObject::slot);
}

void TestObject::slot() {}

TestObject global;

int main(int argc, char *argv[]) {
    TestObject local;
    return 0;
}

如果我删除 TestObject 的构造函数或TestObject globalVar;中的connect调用; 那么就没有崩溃。 在全局范围的构造函数中调用connect出现了问题。 main()中的局部范围变量不会导致任何问题。

我尝试针对 Qt 5.9.9、5.11.2 和 5.14.2 进行编译,但它们都有相同的崩溃。

如果我在 macOS 上编译相同的程序,则不会崩溃。

我做错了什么,或者有什么方法可以解决这个问题?

文档...

通常,不支持在 QApplication 之前创建 QObject,并且可能会导致退出时出现奇怪的崩溃,具体取决于平台。 这意味着也不支持 QObject 的 static 实例。 一个结构合理的单线程或多线程应用程序应该使 QApplication 成为第一个创建和最后销毁的 QObject。

所以目前不支持你所拥有的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM