Vs+Qt添加ui子页面
在Qt项目中,如果要实现一个弹出子界面并包含返回按钮的功能,最合适的选择是使用 Qt Dialog Form File 来创建子界面。
Qt Dialog Form File 与 Qt Widget Form File 的区别
Qt Dialog Form File (Button Bottom) 和 Qt Dialog Form File (Button Right):
这两种文件类型用于创建对话框(Dialog),其中包含了默认的按钮布局:
Button Bottom:按钮(如“OK”、“Cancel”)默认在对话框底部。
Button Right:按钮默认在对话框右侧。
对话框通常用于弹出窗口,它可以模态(阻塞父窗口的交互)或非模态。对话框有自己的事件循环,可以独立于主窗口运行,且在关闭时可以直接销毁。在 Qt Dialog Form File 中也可以显示 QOpenGLWidget 等窗口类型。
Qt Widget Form File:
这种文件类型用于创建一个普通的窗口部件(Widget),可以是主窗口的一部分,也可以作为独立窗口使用。和对话框不同,它没有自己的事件循环,因此更适合作为主窗口的一部分,而不是独立弹出的子界面。
VS+Qt添加ui子界面示例
基本功能:
在qtwidgetsapplication1.ui主界面中添加确认按钮,点击确认按钮能弹出一个子界面,子界面中也有返回按钮,点击返回子界面消失。
- 添加ui文件
-
修改ui界面对象名称并删除所有原先槽函数,根据需要修改按钮名称
-
主ui界面中添加按钮并修改名称
-
添加子窗口对应类文件并修改类的头文件属性
- 添加程序代码
# qtwidgetsapplication1.cpp #include "qtwidgetsapplication1.h" #include "subdialog.h" QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent) : QWidget(parent), subDialog(nullptr) // 初始化子界面指针为 nullptr { ui.setupUi(this); connect(ui.confirmButton, &QPushButton::clicked, this, &QtWidgetsApplication1::onConfirmButtonClicked); } QtWidgetsApplication1::~QtWidgetsApplication1() { if (subDialog) { delete subDialog; // 清理子界面 } } void QtWidgetsApplication1::onConfirmButtonClicked() { if (!subDialog) { subDialog = new SubDialog(this); // 创建子界面实例 } subDialog->show(); // 显示子界面 }
# qtwidgetsapplication1.h #pragma once #include <QtWidgets/QWidget> #include "subdialog.h" #include "ui_qtwidgetsapplication1.h" class QtWidgetsApplication1 : public QWidget { Q_OBJECT public: QtWidgetsApplication1(QWidget* parent = nullptr); ~QtWidgetsApplication1(); private slots: void onConfirmButtonClicked(); private: Ui::QtWidgetsApplication1Class ui; SubDialog* subDialog; };
# subdialog.cpp #include "subdialog.h" SubDialog::SubDialog(QWidget* parent) : QDialog(parent) { ui.setupUi(this); connect(ui.returnButton, &QPushButton::clicked, this, &SubDialog::onReturnButtonClicked); } SubDialog::~SubDialog() {} void SubDialog::onReturnButtonClicked() { this->close(); }
# subdialog.h #pragma once #include <QDialog> #include "ui_subdialog.h" class SubDialog : public QDialog { Q_OBJECT public: explicit SubDialog(QWidget* parent = nullptr); ~SubDialog(); public slots: void onReturnButtonClicked(); // 返回按钮的槽函数 private: Ui::SubDialog ui; };
- 运行即可
说明:运行后可查看系统自动生成的ui_xxx.h文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!