Qt+PCL手把手教材(第6讲)——使用 Qt Designer 设计 UI 界面基础操作附综合示例(C++完整代码)_qt designer教程
Qt Designer 是一个图形化的工具,用于快速设计 Qt Widgets 应用的用户界面(UI)。可以通过拖放控件,轻松创建界面,并且不需要编写界面相关的代码。设计完毕后,Qt Designer 会生成 .ui
文件,可以通过 Qt 编译器将其转换为 C++ 代码并与业务逻辑代码集成。在我们的Qt+PCL开发中需要用到UI设计,因此掌握本节内容十分有必要,将会为后面的内容打下坚实的基础
,下面我们就开始详细的学习吧!
1、安装 Qt Designer
-
安装 Qt 和 Qt Creator:
- 如果你已经安装了 Qt Creator,则已经包含了 Qt Designer。你可以从 Qt Creator 中直接启动它。如下图方式。
- 如果你已经安装了 Qt Creator,则已经包含了 Qt Designer。你可以从 Qt Creator 中直接启动它。如下图方式。
-
单独使用 Qt Designer:
- 如果你不使用 Qt Creator,你也可以单独安装 Qt Designer。通常,它包含在 Qt 的安装包中,可以通过 Qt Maintenance Tool 安装。本教材用的版本为qt-creator-opensource-windows-x86_64-12.0.0.exe,官方下载地址
2、启动 Qt Designer
-
通过 Qt Creator 启动:
- 打开 Qt Creator。
- 选择
File
->New File or Project
->Application
->Qt Widgets Application
。图示如下:
- 在文件浏览器中右键点击
.ui
文件,然后选择 Open with Qt Designer。图示如下:
单击设计出现如下界面。
-
独立启动:
- 在系统的应用程序菜单中找到 Qt Designer。
- 启动 Qt Designer,你可以选择从零开始创建 UI 或打开现有的
.ui
文件。效果最终同上。
3、Qt Designer 界面概述
Qt Designer 提供了一个直观的界面,常见的元素包括:
-
工具箱(Widgets):提供一组常用控件, 如按钮、标签、文本框、表格等,可以通过拖放方式添加到窗口中。拖放的按钮、文本框等效果如下。
-
属性编辑器(Property Editor):显示当前选中控件的属性,如尺寸、颜色、字体等,允许你修改控件的外观和行为。上图按钮的属于如下。
-
信号槽编辑器(Signal/Slot Editor):用于为控件设置交互事件,例如按钮的点击事件等。
-
布局管理器(Layout Manager):用来管理控件的布局,确保在窗口大小改变时,控件能够自动调整位置和大小。
各模块的位置如下图所示。
4、使用 Qt Designer 设计 UI
以下是设计一个简单 UI 界面的一般步骤。
1. 新建 UI 文件
- 启动 Qt Designer 后,可以选择
File
->New
,然后选择Widget
作为类型。点击 Create,你会得到一个空白的窗口,开始设计界面,如下。
2. 添加控件到 UI
- 从 工具箱(Widgets) 中选择你需要的控件(例如按钮、标签、文本框等),然后将其拖动到主窗口中。
- 控件 例如:
- QPushButton:按钮控件
- QLabel:标签控件
- QLineEdit:文本输入框
- QTextEdit:多行文本输入框
- QComboBox:下拉框控件
- QTableWidget:表格控件
以QLabel标签控件为例,将其拖动到主窗口中效果如下。
3. 设置控件的属性
- 选中控件后,打开 属性编辑器(Property Editor),可以调整控件的各类属性,如大小、颜色、字体等。
- 比如,你可以设置按钮的
text
属性来修改按钮显示的文字,或者设置font
来改变字体大小,效果如下。
4. 使用布局管理器
- 在 UI 设计中,布局是很重要的,它确保控件在窗口尺寸调整时能够自适应。
- 布局类型:
- 水平布局(QHBoxLayout):控件水平排列。
- 垂直布局(QVBoxLayout):控件垂直排列。
- 网格布局(QGridLayout):控件按网格排列。
- 选择控件后,点击 布局工具栏 中的布局按钮来应用布局。
在拖QLabel标签控件到主窗口中,有两个标签控件,采用水平布局效果如下。
5. 信号与槽的连接
- 在设计界面时,你可以为控件设置信号(比如按钮点击事件),并将这些信号连接到槽函数(即响应事件的代码)。
- 步骤:
-
选择一个控件(比如按钮)。
-
点击右键,选择 Go to Slot,你可以选择按钮的点击信号(例如
clicked()
)并将其连接到槽函数。
-
Qt Designer 会生成相应的代码,你可以在项目中修改和实现这些槽函数。
-
6. 保存 UI 文件
- 在设计完成后,点击
File
->Save As
,将你的设计保存为.ui
文件。这个文件包含了所有的 UI 元素和控件布局。
5、将 Qt Designer 设计的 UI 集成到 C++ 项目中
1. 在 Qt 项目中使用 .ui
文件
- 当你将设计好的
.ui
文件保存后,你可以将它集成到你的 C++ 项目中。你需要通过 uic(Qt 的 UI 编译器)工具将.ui
文件转换成 C++ 代码。
2. 在项目中包含 .ui
文件
在你的 C++ 代码中使用 ui
文件,通常需要以下几步:
C++ 代码示例
- mainwindow.ui:假设你设计了一个
mainwindow.ui
文件,并希望在主窗口中加载它。
#include \"mainwindow.h\"#include \"ui_mainwindow.h\"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) // 创建 Ui 对象{ ui->setupUi(this); // 设置 UI}MainWindow::~MainWindow(){ delete ui; // 清理 UI 对象}
- .pro 文件:确保
.ui
文件已经添加到项目的.pro
文件中。
FORMS += mainwindow.ui
如下图所示。
- 编译和运行:
- 在 Qt Creator 中点击 Build 和 Run,你的 UI 界面将被正确加载并显示。
3. 信号与槽的连接(通过代码)
你可以通过代码连接信号和槽,处理事件。
// 连接按钮点击信号到槽connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
6、综合示例展示
下面以输入半径计算圆的面积为示例,进行一般常规工具箱使用演示。最终的效果如下。
step1:新建项目——》Qt Widgets Application——》名称:CircleArea——》qmake
step2:基类名称:QDialog,如下图。
step3:一直下一步到完成,如下所示。
step4:双击dialog.ui,在Display Widget容器栏找到Label标签控件,拖拽三个到中间的编辑框中,同样在Input Widget容器栏中找到Line Edit控件,拖拽到中间的编辑框中,在Buttons容器栏找到Push Button按钮控件,拖拽到中间的编辑框中。初步的效果如下。
step5:修改各控件的属性,如下。
将areaLabel_2的“frameShape”修改为Panel;“frameShadow”为Sunken,最终效果如下。
step6:在“计算”按钮上按鼠标右键,在弹出的下拉菜单中选择“转到槽.”命令,在“转到槽”对话框中选择 QAbstractButton 的“clicked()”信号,单击“OK”按钮,如图下所示。
step7:进入 dialog.cpp 文件中按钮单击事件的槽函on_countBtn_clicked(),在函数中添加的代码如下:
void Dialog::on_countBtn_clicked(){ bool ok; QString tempStr; QString valueStr = ui->radiusLineEdit->text(); int valueInt = valueStr.toInt(&ok); double area = valueInt * valueInt * PI; // 计算圆面积 ui->areaLabel_2->setText(tempStr.setNum(area)); }
定义PI为const static double PI=3.14159;
step8:运行程序,输入半径10,单击“计算”,计算的结果如下。
至此完成综合示例。
7、调试与优化
- 调试界面布局:确保所有控件在不同的窗口大小下都能适应。
- 性能优化:如果有大量控件,避免使用过多嵌套的布局,否则可能影响性能。
- 多语言支持:如果你的应用需要支持多语言,可以使用 Qt 的 国际化功能,将字符串提取到
.ts
文件中进行翻译。
8、总结
使用 Qt Designer 设计 UI 界面能大大提高开发效率,尤其是在需要快速设计和调整用户界面时。你可以通过拖放控件、设置属性、应用布局以及连接信号槽来快速构建界面,然后将 .ui
文件集成到 C++ 项目中。通过这种方式,UI 和逻辑代码相对分离,易于维护和扩展。
至此完成第六讲的内容,欢迎喜欢朋友的关注订阅!