C++ Qt/Windows:在全局作用域对象的构造函数中连接信号和插槽时崩溃

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

在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();
};
如果我删除了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;
}