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