QWidget
QWidget是Qt框架中最基础的窗口类,可以理解为用户界面的最基本单元。QWidget类提供了一个空白窗口,可以通过继承该类来创建自定义的窗口类。QWidget类提供了基本的窗口属性和方法,如大小、位置、标题、图标等。
QDialog
QDialog是QWidget类的子类,用于创建对话框窗口。对话框是指与用户进行交互的特殊窗口,例如提示信息、选择项、输入框等。QDialog类提供了一些常用的对话框窗口样式,如消息框、输入框、文件选择框等。
模态和非模态: 对话框可以分为模态对话框和非模态对话框。模态对话框在显示时会阻止用户与其他窗口进行交互,用户只能与当前的对话框交互。非模态对话框则可以与其他窗口并行使用。可以通过setModal()
方法设置对话框的模态性。
对话框结果: 对话框可以返回一个结果给调用方,表明用户的操作或选择。可以通过QDialog的exec()
方法来显示对话框,并通过QDialog::Accepted
和QDialog::Rejected
两个常量来表示用户的接受或拒绝操作。
QMainWindow
QMainWindow同样是QWidget类的子类,用于创建主窗口。主窗口一般是应用程序的顶级窗口,通常包含菜单栏、工具栏、状态栏等控件。QMainWindow类提供了一些用于创建主窗口的特殊功能,如设置中心部件、状态栏、工具栏等。
下图是QMainWindow的框架图:
不支持创建没有central widget的主窗口。必须有一个central widget。
它们的区别如下:
功能上的区别:
- QWidget是最基础的窗口类,没有提供特殊的窗口功能;
- QDialog是用于创建对话框窗口,提供了一些常用的对话框样式;
- QMainWindow是用于创建主窗口,提供了一些用于创建主窗口的特殊功能。
使用场景的区别:
- QWidget适用于创建简单的窗口,例如应用程序中的普通窗口;
- QDialog适用于创建需要与用户进行交互的对话框窗口;
- QMainWindow适用于创建具有菜单栏、工具栏、状态栏等整体布局的主窗口。
继承关系的区别:
QDialog和QMainWindow都是QWidget的子类,因此它们都继承了QWidget的特性和功能。但是QMainWindows具有一些额外的特性,例如中心部件管理、状态栏管理等。 综上所述,QWidget是最基础的窗口类,而QDialog和QMainWindow是QWidget的子类,分别用于创建对话框窗口和主窗口。它们在功能和使用场景上有所区别。