[英]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.