Qt中报错error: allocation of incomplete type ‘Ui::MainXXXX’
可能原因
一、类关联问题
是你的类设计头文件源文件和ui文件的关联可能有问题,解决方案如下:
原文链接
每次在Qt中单独添加UI文件的时候,都会遇到这个问题。需要注意的点如下:
切记要与类名保持一致
举个栗子我的类名叫
CMainWidget
那我的文件名就叫
cmainwidget.h
cmainwidget.cpp
那需要在cmainwidget.h头文件中添加-
namespace Ui { class cmainwidget; }
在cmainwidget.cpp添加
#include "ui_cmainwidget.h"
添加私有成员变量
-
private: Ui::cmainwidget* ui;
初始化成员变量
ui(new Ui::cmainwidget)
构造函数中
-
ui->setupUi(this);
最重要的一点
- 别忘了把
cmainwidget.ui
中的widget
名字改成cmainwidget
这个最重要! - 也就是设计页面中创建的对象的名称,右上角对象树图中可以看到
- 即
QObject
的name
二、主窗口冲突
因为在一个工程中不能同时有两个MainWindow
类,如果你的工程中有两个QMainWindow
类,也会出现这种问题
我们可以简单粗暴点判断
如果有多个,看一下从QMainWindow
继承下来的类的头文件中是否有namespace
关键字
比如我的一个主窗口为MainScene
,那么头文件中可能会有该关键字
namespace Ui {
class MainScene;
}
一个项目中若有多个主窗口继承下来的类,按道理其中应该只有一个会有namespace
三、常见低级错误
可能在开发图中修改过文件名,若修改过文件名,一定要确保相关的头文件包含正确!
因为可能开发途中Debug版的即使包含有点问题,也不一定会报错,但是当切换到Release版的时候,这个错误就会表现出来了