C++ Qt/Windows:在全局作用域对象的构造函数中连接信号和插槽时崩溃
在Windows上的Qt Creator中编译并运行以下程序时,该程序将崩溃: TestObject.h:C++ Qt/Windows:在全局作用域对象的构造函数中连接信号和插槽时崩溃,c++,windows,qt,C++,Windows,Qt,在Windows上的Qt Creator中编译并运行以下程序时,该程序将崩溃: TestObject.h: #include <QObject> class TestObject : public QObject { Q_OBJECT public: TestObject(QObject *parent = nullptr); signals: void signal(); public slots: void slot(); }; 如果我删除了T
#include <QObject>
class TestObject : public QObject {
Q_OBJECT
public:
TestObject(QObject *parent = nullptr);
signals:
void signal();
public slots:
void slot();
};
如果我删除了TestObject构造函数中对connect
的调用或testobjectglobalvar代码>然后就没有崩溃了。在全局作用域的构造函数中调用connect
时出现了一些问题。main()
中的局部作用域变量不会导致任何问题
我尝试过针对Qt5.9.9、5.11.2和5.14.2进行编译,它们都有相同的崩溃
如果我在macOS上编译相同的程序,就不会发生崩溃
是否有什么我做错了,或者有什么方法可以解决这个问题?来自
通常,不支持在QApplication之前创建QObject
根据平台的不同,在退出时可能会导致奇怪的崩溃。这
表示也不支持QObject的静态实例。适当地
结构化单线程或多线程应用程序应使
QApplication应该是第一个创建的QObject,最后一个销毁的QObject
因此,当前不支持您拥有的功能。来自
通常,不支持在QApplication之前创建QObject
根据平台的不同,在退出时可能会导致奇怪的崩溃。这
表示也不支持QObject的静态实例。适当地
结构化单线程或多线程应用程序应使
QApplication应该是第一个创建的QObject,最后一个销毁的QObject
因此,当前不支持您所拥有的
#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;
}