Qt学习笔记#2:QMainWindow与QDockWidget

文章目录

  • QMainWindow
  • QDockWidget


QMainWindow

直接翻译官方文档好了。。它讲的最好。。。

The QMainWindow class provides a main application window.
QMainWindow类提供一个主应用窗口

A main window provides a framework for building an application’s user interface. Qt has QMainWindow and its related classes for main window management. QMainWindow has its own layout to which you can add QToolBars, QDockWidgets, a QMenuBar, and a QStatusBar. The layout has a center area that can be occupied by any kind of widget. You can see an image of the layout below.
一个主窗口提供一个用于构造程序用户界面的平台,Qt使用QMainWindow及其相关的类来管理主窗口界面,QMainWindow类拥有自己的layout,你可以添加QToolBars, QDockWidgets, a一个QMenuBar,以及一个 QStatusBar。这个layout还有一个中心区域,可以添加任何种类的widget

Qt学习笔记#2:QMainWindow与QDockWidget_第1张图片

Note: Creating a main window without a central widget is not supported. You must have a central widget even if it is just a placeholder.
QMainWindow对象必须要有一个central widget


QDockWidget

QDockWidget(const QString & title, QWidget * parent = 0, Qt::WindowFlags flags = 0)
QDockWidget(QWidget * parent = 0, Qt::WindowFlags flags = 0)

QDockWidget是QWidget的子类,它生成那些可以停靠到视窗边缘并自适应大小的widget,这个类应用很广泛,因为它可以让用户在使用UI的过程中更加的轻松,灵活,提高用户体验,大家最熟悉的dock效果,应该就是window针对桌面的dock效果了,你可以把浏览器页面当成DockWidget,整个桌面当成MainWindow,拖动浏览器到桌面边缘,就会有停靠效果,DockWidget的效果和这个是一样的道理。

当你生成一个DockWidget后,你还需要对他进行一些配置,Qt为Dock准备了一些功能属性

设置方法是:

void setFeatures(DockWidgetFeatures features)

参数见下表

常量 描述
QDockWidget::DockWidgetClosable 可关闭
QDockWidget::DockWidgetMovable 可移动
QDockWidget::DockWidgetFloatable 可漂浮
QDockWidget::DockWidgetVerticalTitleBar 在左边显示垂直的标签栏
QDockWidget::AllDockWidgetFeatures 具有1,2,3的所有功能
QDockWidget::NoDockWidgetFeatures 无法关闭,不能移动,不能漂浮

QDockWidget虽然继承了Widget类,但是他们在add的方式上却有很大的不同。

我在第一篇Qt学习笔记里面已经讲过Qt添加widget的方式,需要先铺上一层layout,然后再通过这个layout添加widget或者其他layout,如此循环。

但是DockWidget特殊的地方就在于,系统已经专门为他准备好了layout,DockWidget只能放入这个layout里面才能正常工作,而这个layout貌似只能存在于QMainWidow下面,这就是为什么只有QMainWindow类才有addDockWidget方法的原因。

QMainWidow默认的Layout:

Qt学习笔记#2:QMainWindow与QDockWidget_第2张图片

换言之,DockWidget只能放到QMainWindow里面。

与一般的Widget添加方式不同,由于QMainWindow已经拥有自己专门的layout,所以DockWidget只能够通过addDockWidget的方式添加到QMainWindow内,在其他任何Layout里添加DockWidget,结果都是灾难的,不信你可以试试。

addDockWidget方法:

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget)

它有两个参数,第一个参数是代表DockWidget的初始停靠方位,第二个就是对象

Field Summary
Qt.BottomDockWidgetArea 底部停靠
Qt.LeftDockWidgetArea 左边停靠
Qt.RightDockWidgetArea 右边停靠
Qt.TopDockWidgetArea 上部停靠
Qt.NoDockWidgetArea 不显示Widget

你可能感兴趣的:(QT学习笔记)