QDialog、QWidget、QMainWindow的区别

QDialog、QWidget、QMainWindow的区别

  1. dialog有exec函数,如果是dialog窗口,后边的窗口是不可选的;

  2. widget和dialog都有show函数,如果通过这个函数显示这两种类型的窗口,则两个窗口都是可选的;

  3. widget主要是在上面放置布局和控件;

  4. mainwindow可以显示菜单,工具栏,状态栏、托盘等功能。

注意:
1、查看帮助文档可以发现,setMenuBar、addToolBar、setCentralWidget、setStatusBar几种行为只有QMainWindow类具有。 因此,在继承自QWidget类的用户类中无法创建菜单栏等几种行为。 这就是QMainWindow和QWidget的主要区别。
2、 QWidget继承于QObject和QPaintDevice,QDialog和QMainWindow则继承于QWidget,QDialog、QMainWindow两者之间没有直接关系。

QDialog

QDialog类是对话框窗口的基类。

对话框窗口是一个顶级窗体(不会被嵌入到父窗口部件的窗口部件),主要用于短期任务以及和用户进行简要通讯。QDialog支持扩展性并且可以提供返回值。它们可以有默认按钮,也可以有一个QSizeGrip在它的右下角,使用setSizeGripEnabled()。通常情况下,顶级窗口部件是有框架和标题栏的窗口(可自定义)。

dialog窗口为了给人们提供更好的可视化操作,但是对于程序员而言,这个操作并不是立刻执行的;而是当在窗口选择关闭后,才将选择的结果返回给后台,后台才可以根据选择的结果进行相应的操作。

注意:QDialog(以及其它使用Qt::Dialog类型的widget)使用父窗口部件的方法和Qt中其它类稍微不同。对话框总是顶级窗口部件,但是如果它有一个父对象,它的默认位置就是父对象的中间。它也将和父对象共享工具条条目。

QWidget

QWidget类是所有用户界面对象的基类。

窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。每一个窗口部件都是矩形的,并且它们按Z轴顺序排列。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。

QWidget有很多成员函数,但是它们中的一些有少量的直接功能:例如,QWidget有字体属性,但是自己从来不用。为很多继承它的子类提供了实际的功能,比如QLabel、QPushButton、QCheckBox等等。

QMainWindow

QMainWindow类提供一个有菜单栏、工具栏、状态栏的主应用程序窗口(例如:Qt Creator等)。

主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围 菜单、工具条和一个状态条。QMainWindow常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态条变得更容易,当用户点击菜单项或者工具条按钮时,槽会被调用。

QMainWindow拥有自己的布局,我们可以使用QMenuBar(菜单栏)、QToolBar(工具栏)、QStatusBar(状态栏)以及QDockWidget(悬浮窗体),布局有一个可由任何种类小窗口所占据的中心区域。

窗体选择技巧

如果是顶级对话框,则基于QDialog创建。

如果是主窗体,则基于QMainWindow创建。

如果不确定、前两种情况都有,或者需要嵌入到其他窗体中,则基于QWidget创建。

自定义mianWidget和Widget窗体的区别

1、mianWidget和Widget 不同,mianWidegt在创建界面时需要绘制中心界面setCentralWidget(mainWIdget);

2、mainWIdget->setLayout(qHBoxLayout); 只能插入布局

简单实例如下:

QHBoxLayout *qHBoxLayout = new QHBoxLayout();
qHBoxLayout->setMargin(0);
QPushButton *QQBtu = new QPushButton("ssssss");
qHBoxLayout->addWidget(QQBtu);
QWidget *mainWIdget = new QWidget();

//项目主布局

QHBoxLayout *mainLayout =new QHBoxLayout();
mainWIdget->setLayout(qHBoxLayout);

setCentralWidget(mainWIdget);
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值