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
相关推荐
m0_748873552 小时前
模板编译期排序算法
开发语言·c++·算法
myloveasuka2 小时前
[Java]包装类
java·开发语言
2401_842623652 小时前
基于C++的爬虫框架
开发语言·c++·算法
无限进步_2 小时前
【C++】获取字符串最后一个单词长度的多种解法
开发语言·c++·ide·windows·git·github·visual studio
myloveasuka2 小时前
时间相关类
java·开发语言
zyb11475824332 小时前
集合的学习
开发语言·python·学习
6+h2 小时前
【java IO】转换流 + 对象流 + 序列化详解
java·开发语言
沈阳信息学奥赛培训2 小时前
#define 和 typedef 的区别
开发语言·c++
Laurence2 小时前
CMake 查找、打印 Qt 所有 Components / 模块列表
开发语言·qt·cmake·打印·查找·所有组件·所有模块