目录
[1.在头文件中包含 UI 文件](#1.在头文件中包含 UI 文件)
qt使用中,已经添加了类文件,当创建ui文件之后并运行,很容易报错,提示:error: allocation of incomplete type 'Ui::',,具体的排查解决办法如下:
步骤一:创建.ui文件:
- 在 Qt Creator 中,右键点击你的项目文件夹,然后选择 Add New。
- 选择 Qt Designer Form Class ,然后选择 Widget。
- 为
.ui
文件命名(例如test.ui
),然后选择 Finish。 - 打开
test.ui
文件,在 Qt Designer 中设计你想要的 UI 界面(例如,添加按钮、标签等)。
步骤二:修改c++类(这里假设类名为test)
1.在头文件中包含 UI 文件
打开你的 test.h
头文件,并包含自动生成的 ui_test.h
文件。确保将 Ui::test
类作为成员变量添加到 test
类中:
cpp
// test.h
#ifndef TEST_H
#define TEST_H
#include <QWidget>
#include "ui_test.h" // 引入自动生成的 UI 头文件
class test : public QWidget
{
Q_OBJECT
public:
explicit test(QWidget *parent = nullptr);
~test();
private:
Ui::test *ui; // 声明 Ui::test 指针,指向 UI 对象
};
#endif // TEST_H
2.在实现文件中初始化ui
打开 test.cpp
文件,在构造函数中初始化 ui
指针并调用 setupUi(this)
来加载 UI:
cpp
// test.cpp
#include "test.h"
#include "ui_test.h" // 包含自动生成的 UI 头文件
test::test(QWidget *parent) :
QWidget(parent),
ui(new Ui::test) // 初始化 Ui::test 对象
{
ui->setupUi(this); // 设置 UI
}
test::~test()
{
delete ui; // 删除 UI 对象,避免内存泄漏
}
3.连接ui空间(比如设置信号槽)
如果需要响应 UI 中的控件(如按钮、文本框等)的信号,可以在 test
类中设置相应的槽函数,并将信号与槽连接。
比如,如果 UI 中有一个按钮 pushButton
,可以连接它的点击信号:
cpp
// test.cpp
test::test(QWidget *parent) :
QWidget(parent),
ui(new Ui::test)
{
ui->setupUi(this);
connect(ui->pushButton, &QPushButton::clicked, this, &test::on_pushButton_clicked);
}
void test::on_pushButton_clicked() {
// 处理按钮点击事件
qDebug() << "Button clicked!";
}
此时不要忘记在test.h文件中声明槽函数
cpp
// test.h
private slots:
void on_pushButton_clicked(); // 声明槽函数
步骤三:更新.pro文件
可以通过右键->重新构建qmake来完成
总结:
- 使用 Qt Designer 创建并编辑
test.ui
文件。 - 在
test.h
文件中包含ui_test.h
,并将Ui::test
作为成员变量。 - 在
test.cpp
中,使用ui->setupUi(this)
来初始化 UI 并关联控件。 - (可选)在类中连接信号和槽函数,以响应 UI 控件的事件。
- 更新
.pro
文件,确保.ui
文件被包含。