Qt Designer 完整教程:从零开始打造专业界面
目录
-
第一部分:初识 Qt Designer
(图片来源网络,侵删)- 1 什么是 Qt Designer?
- 2 为什么使用 Qt Designer?(优势)
- 3 如何启动 Qt Designer?
- 4 界面概览
-
第二部分:核心概念与基本操作
- 1 项目与
.ui文件 - 2 控件
- 3 布局
- 4 容器
- 5 栅格布局
- 6 对齐线
- 1 项目与
-
第三部分:实战演练:创建一个登录窗口
- 1 新建项目
- 2 拖放控件
- 3 使用布局管理器
- 4 设置对象名称
- 5 样式美化
- 6 保存
.ui文件
-
第四部分:在 C++ 代码中使用
.ui文件- 1 方法一:使用
uic工具(推荐) - 2 方法二:使用
QUiLoader类(动态加载)
- 1 方法一:使用
-
第五部分:进阶技巧
(图片来源网络,侵删)- 1 伙伴编辑器
- 2 样式表
- 3 自定义控件
- 4 信号与槽
-
第六部分:总结与资源
第一部分:初识 Qt Designer
1 什么是 Qt Designer?
Qt Designer 是 Qt 官方提供的一个可视化界面设计工具,它允许你通过拖放的方式,像使用 Photoshop 或 Figma 一样,快速创建出应用程序的用户界面,你设计的界面会被保存为一个 .ui 文件(实际上是 XML 格式),这个文件可以被 C++ 或 Python 代码轻松加载和使用。
2 为什么使用 Qt Designer?(优势)
- 所见即所得:直观地设计界面,无需手动编写大量繁琐的布局和定位代码。
- 提高效率:分离 UI 设计和业务逻辑,让设计师和开发者可以并行工作。
- 跨平台:使用 Qt Designer 设计的界面在不同操作系统(Windows, macOS, Linux)上都能保持一致的外观。
- 丰富的控件:提供了 Qt 框架中几乎所有标准控件,并支持自定义控件。
3 如何启动 Qt Designer?
安装 Qt 后,有几种方式可以启动它:
- 通过开始菜单/启动台:通常在 Qt 的安装目录下可以找到 "Qt Designer" 的快捷方式。
- 通过命令行:打开终端或命令提示符,输入
designer并回车。 - 通过 Qt Creator:在 Qt Creator 中,可以通过
Tools -> External -> Qt Designer来启动。
4 界面概览
启动 Qt Designer 后,你会看到以下主要区域:

- 主菜单栏:包含文件、编辑、视图、格式、工具、帮助等菜单。
- 工具栏:提供常用功能的快捷按钮。
- Widget Box (控件箱):这里存放了所有可用的 UI 控件,如按钮、标签、输入框、列表等,你可以直接将控件拖到窗体上。
- Object Inspector (对象检查器):以树状结构显示当前窗体中的所有控件及其层级关系,这对于理解复杂的布局结构非常有用。
- Property Editor (属性编辑器):这是最重要的面板之一,选中任何一个控件后,你都可以在这里修改它的各种属性,如
objectName(对象名称)、text(文本)、geometry(几何尺寸)、styleSheet(样式表)等。 - Action Editor (动作编辑器):用于创建和管理 QAction,通常用于菜单栏和工具栏。
- 中央设计区域:你的主设计画布,你可以在这里拖放控件并设计界面。
第二部分:核心概念与基本操作
1 项目与 .ui 文件
一个设计会话就是一个项目,它被保存为一个 .ui 文件,这个文件是纯文本的 XML 文件,描述了界面上所有控件的类型、属性、布局和层级关系。
2 控件
控件是构成界面的基本元素,如 QPushButton(按钮)、QLabel(标签)、QLineEdit(单行文本框)等,从 Widget Box 中拖动控件到设计区域即可使用。
3 布局
布局是 Qt Designer 的精髓。绝对定位(手动设置 x, y, width, height)在不同分辨率下表现很差,而布局管理器可以让界面自动适应窗口大小的变化。
Qt Designer 支持以下几种布局:
- 垂直布局:控件垂直排列,高度可变,宽度固定。
- 水平布局:控件水平排列,宽度可变,高度固定。
- 网格布局:控件按行和列排列,最灵活、最常用。
- 表单布局:专门用于创建表单,如“标签: 输入框”的排列方式。
如何应用布局?
- 选中一个或多个控件。
- 在工具栏或右键菜单中选择对应的布局按钮,或使用快捷键(如
Ctrl+2为垂直布局)。
4 容器
容器是用于容纳其他控件的特殊控件,
- Group Box (分组框):将相关控件组合在一起,并带有标题。
- Tab Widget (选项卡):创建多页界面。
- Scroll Area (滚动区域)超出可视区域时,提供滚动条。
5 栅格布局
栅格是窗体上的一个背景网格,你可以通过 视图 -> 显示栅格 来开启它,开启栅格后,拖动控件时,控件会自动对齐到最近的网格线上,这使得对齐多个控件变得非常容易。
6 对齐线
当你拖动控件时,Qt Designer 会自动检测并显示临时的对齐线,帮助你将控件与其他控件的边缘或中心对齐,这是实现像素级完美对齐的关键。
第三部分:实战演练:创建一个登录窗口
让我们通过一个具体的例子来巩固所学知识。
目标: 创建一个包含“用户名”、“密码”输入框和“登录”、“取消”按钮的登录窗口。
1 新建项目
- 启动 Qt Designer。
- 在弹出的对话框中,选择 "Main Window"(主窗口)或 "Dialog"(对话框),对于登录窗口,选择 "Dialog" 更合适。
- 点击 "Create"。
2 拖放控件
从 Widget Box 中拖动以下控件到窗体上:
- 两个
Label- 两个
Line Edit(单行文本框)- 一个
Push Button(按钮)- 再拖一个
Push Button - 两个
3 使用布局管理器
- 调整标签和输入框:按住
Ctrl键,选中第一个标签和它旁边的输入框,点击工具栏的 表单布局 按钮,对另一组标签和输入框做同样操作。 - 调整按钮:选中两个按钮,点击工具栏的 水平布局 按钮。
- 整体布局:现在窗体上有三个部分(两个表单和一个水平布局的按钮),选中这三个部分,点击工具栏的 垂直布局 按钮。
当你调整窗口大小时,所有控件都会自动调整位置和大小,保持良好的布局。
4 设置对象名称
这是至关重要的一步,因为我们在 C++ 代码中需要通过这个名称来访问控件。
- 在 Object Inspector 中选中第一个
Label。 - 在 Property Editor 中找到
objectName属性,将其值改为labelUsername。 - 同样地,将其他控件的
objectName分别设置为:- 第二个
Label->labelPassword - 第一个
Line Edit->lineEditUsername - 第二个
Line Edit->lineEditPassword(可以设置其echoMode属性为Password,使其显示为 ) - 第一个
Button->btnLogin - 第二个
Button->btnCancel
- 第二个
5 样式美化
我们可以使用样式表来美化界面。
- 选中整个窗体(在 Object Inspector 中点击
Dialog)。 - 在 Property Editor 中找到
styleSheet属性,点击右侧的 按钮。 - 在弹出的编辑器中输入一些 CSS 代码,
QDialog { background-color: #f0f0f0; } QPushButton { background-color: #007bff; color: white; border: none; padding: 5px 15px; border-radius: 3px; } QPushButton:hover { background-color: #0056b3; } QLineEdit { border: 1px solid #ccc; border-radius: 3px; padding: 5px; } - 点击 "OK" 应用样式。
6 保存 .ui 文件
点击 文件 -> 保存,将文件命名为 login_dialog.ui 并保存到你的项目目录中。
第四部分:在 C++ 代码中使用 .ui 文件
我们将在 C++ 程序中加载并使用这个设计好的界面。
1 方法一:使用 uic 工具(推荐)
这是最常用、最简单的方法,它将 .ui 文件直接编译成 C++ 头文件(.h)。
-
编译
.ui文件: 打开命令行,进入你的项目目录,运行以下命令:# 将 login_dialog.ui 编译成 ui_login_dialog.h uic login_dialog.ui -o ui_login_dialog.h
现在你的项目中会多出一个
ui_login_dialog.h文件。 -
编写 C++ 代码: 创建一个
main.cpp文件,内容如下:#include <QApplication> #include <QDialog> #include "ui_login_dialog.h" // 包含编译后的 UI 头文件 int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建一个 QDialog 对象 QDialog dialog; // 创建一个 Ui::LoginDialog 对象 Ui::LoginDialog ui; // 使用 setupUi 函数将 UI 设置到 dialog 对象上 ui.setupUi(&dialog); // 现在你可以通过 ui 对象访问控件了 // 将登录按钮的文本改为 "登录" ui.btnLogin->setText("登录"); // 显示对话框 dialog.exec(); return app.exec(); } -
编译和运行: 确保你的
CMakeLists.txt或.pro文件正确配置了 Qt 模块,然后编译并运行程序,你就能看到设计好的登录窗口了。
2 方法二:使用 QUiLoader 类(动态加载)
这种方法不需要预先编译 .ui 文件,而是在运行时动态加载,更加灵活。
#include <QApplication>
#include <QDialog>
#include <QUiLoader> // 包含 QUiLoader
#include <QFile> // 包含 QFile
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QUiLoader loader;
// 打开 .ui 文件
QFile file(":/login_dialog.ui"); // 假设将 ui 文件作为资源文件
// 或者 QFile file("login_dialog.ui"); // 从文件系统加载
if (file.open(QIODevice::ReadOnly)) {
// 使用 loader 加载 UI 文件
QDialog *dialog = loader.load(&file);
if (dialog) {
dialog->show(); // 直接显示,不需要 exec()
}
file.close();
}
return app.exec();
}
这种方法需要将 .ui 文件作为资源文件添加到项目中,或者在运行时提供正确的路径。
第五部分:进阶技巧
1 伙伴编辑器
伙伴编辑器用于为标签和输入框建立关联,这样当用户按下 Alt + 标签文本中的字母时,焦点会自动跳转到对应的输入框。
- 选中一个标签(如
labelUsername)。 - 在 Property Editor 中找到
buddy属性。 - 点击右侧的下拉箭头,选择它对应的输入框(
lineEditUsername)。 - 修改标签的
text属性,&User Name,这样U字母下划线,按 Alt+U 就能聚焦到输入框。
2 样式表
样式表是 Qt 的 CSS 实现,功能强大,除了简单的背景色和字体,你还可以:
- 设置图片背景:
background-image: url(:/images/my_image.png); - 为不同状态的控件设置不同样式:
QPushButton:pressed { background-color: red; } - 设置边框、阴影等复杂效果。
3 自定义控件
如果你有自定义的 QWidget 子类,你也可以将它集成到 Qt Designer 中,这样就可以像使用标准控件一样拖放它,这需要实现一些特定的接口,并生成一个 .plugins 文件。
4 信号与槽
虽然 Qt Designer 主要用于设计静态界面,但它也支持预览信号和槽的连接。
- 进入
编辑 -> 编辑信号/槽模式。 - 从一个控件(如按钮)拖动到另一个控件或窗体本身。
- 在弹出的对话框中选择一个信号(如
clicked())和一个槽(如close()),点击 "OK"。 - 这个连接会被保存到
.ui文件中,并在运行时自动建立,这对于快速原型验证非常有用。
第六部分:总结与资源
Qt Designer 是 Qt 开发中不可或缺的工具,通过它,你可以:
- 快速创建美观且响应式的用户界面。
- 分离关注点,让 UI 设计和逻辑代码清晰分离。
- 利用布局系统,轻松实现跨平台的自适应界面。
掌握 Qt Designer 是迈向高效 Qt 开发的第一步。
推荐资源
- 官方文档:Qt Assistant(随 Qt 安装)中的 "Qt Designer Manual" 是最权威的参考资料。
- Qt 官方示例:Qt Creator 自带了许多使用 Qt Designer 的示例,非常值得学习。
- 视频教程:在 Bilibili、YouTube 等平台搜索 "Qt Designer",可以找到大量中文和英文的视频教程。
- 社区:在 Stack Overflow、Qt 中文论坛等社区提问,可以获得快速的帮助。
希望这份详细的教程能帮助你顺利上手 Qt Designer!
