最近遇到一个问题,程序编译时出现报错: Must construct a QApplication before a QWidget。
我的main.cpp有这样的代码
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
}
另外一个SS.h
class SS : public QWidget
{
Q_OBJECT
public:
explicit SS(QWidget *parent = nullptr);
};
extern SS theApp;
SS.CPP
#include "SS.h"
SS theApp;
SS::SS(QWidget *parent) : QWidget(parent)
{
}
分析原因:Qt要求先构造QApplication再构造QWidget,SS theApp 是一个全局的,全局对象的构造函数会在main函数之前执行,所以会先执行SS theApp再 QApplication a(argc, argv); 这违反了 Qt的规则;
解决方法:SS *theApp; 改成指针,需要用的时候再new;