qt-6不同窗口使用方法和差别详解

Qt Designer 新建窗体模板与窗口部件详解

一、templates\forms(顶层窗口模板)

这些是可独立显示的顶层窗口,直接作为程序的主窗口或弹窗使用。

1. Dialog with Buttons Bottom
  • 作用:底部带标准按钮的对话框
  • 典型场景:确认 / 取消类弹窗(如 "是否保存"、"设置确认")
  • 自带控件 :底部预布局了 OK/Cancel 等标准按钮,按钮区域使用 QDialogButtonBox 管理,符合系统交互规范
  • 特点:模态弹窗为主,适合需要用户明确操作后才能回到主界面的场景
2. Dialog with Buttons Right
  • 作用:右侧带标准按钮的对话框
  • 典型场景:配置类弹窗(如选项设置、参数配置),右侧按钮更符合部分工具的布局习惯
  • 自带控件 :右侧预布局 OK/Cancel 按钮,其他区域留给自定义内容
  • 特点:和底部按钮版功能一致,仅按钮位置不同,视觉上更适合宽窗口
3. Dialog without Buttons
  • 作用:无默认按钮的空白对话框
  • 典型场景:复杂弹窗(如你截图里的硬件配置、TSMaster 这类多控件配置界面)
  • 自带控件 :纯空白 QDialog,需要自己拖拽按钮、分组框等所有控件
  • 特点:自由度最高,适合需要完全自定义布局的弹窗
4. Main Window
  • 作用:应用程序主窗口模板
  • 典型场景 :程序的主界面(你的 main_window.ui 就是这个类型)
  • 自带控件:内置菜单栏、工具栏、状态栏、中心部件区域,完整支持桌面应用的窗口结构
  • 特点:唯一支持菜单栏 / 工具栏 / 状态栏的模板,是构建完整应用的首选

也就是可以直接设置主菜单,主菜单下可以分为子菜单

5. Widget
  • 作用:基础空白部件窗口
  • 典型场景
    • 可作为独立窗口(比 Dialog 更轻量)
    • 作为其他布局的容器部件(嵌入到主窗口或其他弹窗中)
  • 自带控件 :纯空白 QWidget,无任何预定义结构
  • 特点:最基础的容器,灵活性最强,但需要自己实现所有窗口功能

二、窗口部件(可嵌入的子控件 / 容器)

这些是不能独立作为顶层窗口 的部件,需要嵌入到 Main Window/Dialog/Widget 中使用,用于实现复杂布局。

1. QDockWidget
  • 作用:可停靠 / 浮动的面板
  • 典型场景:IDE 的侧边栏、工具栏、调试面板(如 VS Code 的侧边栏、Qt Creator 的属性面板)
  • 特点:可拖动到主窗口边缘停靠,也可浮动为独立窗口,支持折叠 / 展开
  • 使用必须嵌入到 QMainWindow
2. QFrame
  • 作用:带边框的基础容器
  • 典型场景:作为分组容器、分隔线、装饰性边框
  • 特点:可设置不同边框样式(凸起、凹陷、纯线条),轻量且无内置布局
  • 使用:作为其他控件的父容器,用于视觉分组
3. QGroupBox
  • 作用:带标题的分组框
  • 典型场景:配置界面的功能分组(如你截图里的「CAN 控制器」「仲裁」「数据」分组)
  • 特点:自带标题栏,可设置是否可勾选启用 / 禁用内部控件,视觉上清晰划分功能区域
  • 使用:包裹一组相关控件,是上位机配置界面最常用的容器
4. QScrollArea
  • 作用:带滚动条的容器
  • 典型场景:内容过多超出窗口显示范围时(如长列表、多配置项)
  • 特点:自动显示水平 / 垂直滚动条,保证小窗口也能浏览完整内容
  • 使用 :内部包裹一个子部件(如 QWidget),子部件尺寸超出时自动滚动
5. QMdiArea
  • 作用:多文档界面(MDI)容器
  • 典型场景:多窗口编辑器(如 Photoshop、CAD 的多文档标签 / 窗口)
  • 特点:支持在主窗口内打开多个子窗口,可平铺 / 层叠 / 最小化
  • 使用:仅适用于需要多文档管理的复杂应用
6. QTabWidget
  • 作用:标签页容器
  • 典型场景:多页配置界面(如浏览器标签、设置面板的「常规 / 高级 / 网络」分页)
  • 特点:通过标签切换不同页面,节省空间,结构清晰
  • 使用 :每个标签对应一个 QWidget 页面,适合分类展示大量内容
7. QToolBox
  • 作用:折叠式面板容器
  • 典型场景:侧边栏折叠菜单(如 QQ 面板、PS 的工具面板)
  • 特点:可展开 / 折叠的分组,同一时间只显示一个分组内容
  • 使用:适合层级较少、需要垂直空间的侧边导航
8. QStackedWidget
  • 作用:堆叠式页面容器
  • 典型场景:向导流程、步骤式配置(如安装向导、设置向导)
  • 特点:多个页面堆叠在一起,同一时间只显示一个页面,通过代码切换
  • 使用:配合按钮 / 菜单实现页面切换,隐藏的页面不占用显示空间
9. QWizard
  • 作用:向导对话框模板
  • 典型场景:分步引导流程(如软件安装向导、设备配置向导)
  • 特点:内置「上一步 / 下一步 / 完成」按钮,自动管理页面跳转逻辑
  • 使用 :配合 QWizardPage 实现多步骤引导
10. QWizardPage
  • 作用:向导的单个页面
  • 典型场景 :作为 QWizard 的子页面,承载每一步的内容
  • 特点:可设置页面标题、子标题,支持页面间数据传递
  • 使用 :必须嵌入到 QWizard 中,不能独立使用

🎯 选型建议(结合你的上位机场景)

表格

需求场景 推荐模板
程序主界面(带菜单栏 / 工具栏) Main Window
硬件配置 / 参数设置弹窗 Dialog without Buttons
确认 / 提示类简单弹窗 Dialog with Buttons Bottom
多页配置 / 分类设置 QTabWidget + QGroupBox
长列表 / 超多配置项 QScrollArea + QGroupBox
侧边导航 / 折叠面板 QToolBoxQDockWidget
相关推荐
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner1 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz6 天前
QML Hello World 入门示例
qt
xcyxiner9 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner10 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner10 天前
DicomViewer (添加模型类)3
qt
xcyxiner11 天前
DicomViewer (目录调整) 2
qt
xcyxiner11 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00613 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术13 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript