在平常 qt 开发中,通常要写自己的窗口类,那么这个窗口类该继承自哪个类呢?
QWidget 继承于 QObject 和 QPaintDevice,
QDialog 和 QMainWindow 则继承于 QWidget。
QT提供的默认基类只有QMainWindow、QWidget、和QDialog这三种,这三种窗体也是用的最多的,QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,而他们全部继承自QWidget。不仅如此,所以的窗口部件都继承自QWidget,继承关系如图所示。
下面就来看下三个窗口基类的区别:
1. QMainWindow
QMainWindow类 提供一个有 "中央窗口部件、菜单栏、工具栏、状态栏" 的 主应用程序窗口。QMainWindow 窗口经常被继承。QMainWindow 拥有自己的布局,可以使用 QMenuBar(菜单栏)、QToolBar(工具栏)、QStatusBar(状态栏)以及QDockWidget(悬浮窗体),布局有一个可由任何种类小窗口所占据的中心区域。
2. QWidget基础窗口部件
QWidget类是所有用户界面对象的基类,被称为基础窗口部件。像主窗口、对话框、标签、还有按钮、文本输入框等都是窗口部件。这些部件可以接受用户输入,显示数据和状态信息,并且在屏幕上绘制自己。QT把没有嵌入到其它部件的部件称为窗口,一般窗口都有边框和标题栏,就像程序中的widget和label一样,QMainWindow和大量的QDialog子类是最一般的窗口类型,窗口就是没有父部件的部件,所以又称为顶级部件,
3. 对话框QDialog
1.模态对话框和非模态对话框
QDialog类是所有对话框窗口类的基类,对话框窗口是一个经常用来完成短小任务或者和用户进行简单交互的顶层窗口。按照运行对话框是否可以和该程序其它窗口交互,对话框被称为:模态和非模态的。
模态对话框 即在没有关闭之前,不能再与同一个应用程序的其它窗口进行交互,比如新建项目时弹出的对话框。要使一个对话框称为模态的,则只需要调用它的exec()函数。
非模态对话框 即可以在同一程序中与他交互,如查找替换对话框。要使之称为非模态,可以先使用new 操作来创建QDialog,然后再使用->show()函数显示。
2.多窗口切换
Qt使用信号与槽机制来完成对象之间的协同操作,简单来说,信号与槽都是函数,比如单击窗口上一个按钮弹出一个对话框,那么可以将这个按钮的单击信号和自定义的槽函数关联起来,在这个槽中创建一个对话框来显示他。
void Widget::on_pushButton_clicked()
{
QDialog *dialog =new QDialog();
dialog->exec();
}
QMainWindow、QWidget、QDialoh 使用原则
如果需要嵌入到其他窗体中,则基于 QWidget 创建。
如果是顶级对话框,则基于 QDialog 创建。
如果是主窗体,则基于 QMainWindow 创建。