六、新建窗体时,几种窗体的区别

新建窗体时,会有几种类型的选项,很多同学不明白其中的意思,我们在本章节中详细介绍一下几种窗体的区别。

窗体的类型分以下几种

Dialog with Buttons Bottom 带按钮的对话框,按钮在底部

Dialog with Buttons Right 带按钮的对话框,按钮在右侧

Dialog without Buttons 无按钮的对话框

Main Window 主窗体 带菜单栏、状态栏等部件

Widget 部件窗体(窗体容器)

以上几种窗体的区别:

Dialog(对话框窗体):

Dialog 是一种特殊的窗口,通常用于在应用程序中执行特定任务、获得用户输入或显示某种信息。

对话框可以是模态的(阻塞用户与应用程序的交互,直到对话框关闭)或非模态的(允许用户与应用程序的其他部分交互)。

常见的对话框包括文件对话框、颜色选择对话框、消息框等。

Qt中提供了 QDialog 类,它是对话框窗口的基类。

MainWindow 和 Widget 比较类似,但它们有一些区别,主要取决于它们在应用程序中的角色和使用场景。

MainWindow(主窗体):

MainWindow 是Qt框架中的一个特殊类,通常用于表示应用程序的主窗口。

主窗口是应用程序的主要用户界面窗口,通常包含菜单栏、工具栏、状态栏和中央工作区等。

MainWindow 继承自 QMainWindow 类,它提供了许多用于创建典型主窗口的功能和方法。

通常,应用程序的整体结构和布局由 MainWindow 类来定义,包括主窗口的外观和交互。

Widget(部件窗体):

Widget 是一个泛指的术语,用于描述用户界面中的各种元素,从简单的按钮和文本框到复杂的自定义部件。

在Qt中,QWidget 是所有用户界面部件的基类,包括按钮、文本框、标签等。

通常,Widget 是应用程序中的一个小组件,可以作为 MainWindow 中的子部件或独立存在。

QWidget 类提供了创建和管理窗口部件的基本功能,但它本身不是主窗口。

MainWindow 通常是应用程序的主窗口(约定俗成的规则),而 Widget 则是用于构建和组织主窗口中的各种用户界面元素的基本部件。在一个典型的应用程序中,你可能会创建一个主窗口(MainWindow)来容纳和管理整个应用程序的结构,而在主窗口内使用多个小部件(Widget)来构建具体的用户界面。

在Qt中,MainWindow 和 Widget 实际上是非常相似的,因为 MainWindow 本质上也是继承自 QWidget。MainWindow 是 QWidget 的一个子类,它提供了一些额外的功能,特别是为了创建应用程序的主窗口。

主要的区别在于 MainWindow 更适合作为应用程序的主窗口,它预先包含了一些标准的部件,如菜单栏、工具栏和状态栏。这使得创建具有标准用户界面元素的主窗口变得更加方便。

使用 MainWindow 的情况:

cpp

#include

class MyMainWindow : public QMainWindow {

Q_OBJECT

public:

MyMainWindow(QWidget *parent = nullptr);

// 可以添加特定于主窗口的功能和控件...

};

使用 Widget 的情况:

cpp

#include

class MyWidget : public QWidget {

Q_OBJECT

public:

MyWidget(QWidget *parent = nullptr);

// 适用于一般的窗口,不包含主窗口的额外功能...

};

在许多情况下,你可以根据需求选择使用 MainWindow 或 Widget。如果你的应用程序只需要一个简单的窗口,没有额外的主窗口功能,那么使用 Widget 完全是可以的。但如果你需要一个具有标准主窗口功能的窗口,例如带有菜单栏和工具栏的窗口,那么使用 MainWindow 会更方便。

以上的内容不知道是不是把同学们搞蒙了,下边我用一句人话总结:

MainWindowt和Widget类型的窗体都是继承自QWidget,只不过MainWindow对应的QMainWindow又在QWidget基础上做了一层封装扩展,带了如菜单栏、工具栏和状态栏等类。

《写在最前边》

《一、QT的前世今生》

《二、QT下载、安装及问题解决(windows系统)》

《三、Qt Creator使用》​​​

​​​​​​​《四、Qt 的第一个demo-CSDN博客》

《五、带登录窗体的demo》

《六、新建窗体时,几种窗体的区别》

《七、Qt 信号和槽》​​​​​​​

相关推荐
2601_956121979 小时前
二分算法(知识点+题目)
c++·算法
蒙奇·D·路飞-11 小时前
OpenClaw:开源的《合金弹头》精神续作与终极本地部署指南
c++·开源·mfc
小星星闪亮登场13 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
梓䈑13 小时前
【用 Vibe Coding 实现的 C++17 在线判题系统】前端开发 + Web 自动化测试
前端·c++·ai编程
冻柠檬飞冰走茶13 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
TunerT_TQ14 小时前
Valhalla 静态工程审阅 #018|MMCV 源码证据驱动评测【大厂开源基础设施特辑】
c++·开源·mfc·#计算机视觉·#商汤科技·#openmmlab·#静态源码审计
别动我齐刘海15 小时前
Day6 unitree_G1人形机器人GMR—— MotionInput
c语言·c++·人工智能·学习·机器学习·机器人·github
Henry Zhu12316 小时前
C++17 `weak_from_this` 详解:让对象安全地观察自己
c++
June`18 小时前
warp shuffle指令
c++·人工智能·算法·cuda
乱七八糟的屋子19 小时前
【C++数值计算】NumCpp超详细入门教程(纯正Numpy语法、零学习成本、C++首选科学计算库、性能压测对比)
c++·数值计算·numpy·高性能计算·科学计算·ndarray