一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
最近遇到一个问题,程序编译时出现报错: 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;

posted on 2024-03-14 13:56  一杯清酒邀明月  阅读(46)  评论(0编辑  收藏  举报