当前位置:   article > 正文

QMainWindow、QDockWidget

QMainWindow、QDockWidget

QDockWidget

一、描述

QDockWidget 可以停靠在 QMainWindow 内或作为桌面上的顶级窗口浮动。

 

二、类型成员

1、enum QDockWidget::DockWidgetFeature

  • DockWidgetClosable:可以关闭。 在某些系统上,停靠小部件在浮动时总是有一个关闭按钮。
  • DockWidgetMovable:可以由用户在停靠区域之间移动。
  • DockWidgetFloatable:可以从主窗口中分离出来,作为一个独立的窗口浮动。
  • DockWidgetVerticalTitleBar:在其左侧显示垂直标题栏。这可用于增加 QMainWindow 中的垂直空间量。
  • NoDockWidgetFeatures:无法关闭、移动或浮动。

三、属性成员

1、allowedAreas : Qt::DockWidgetAreas

可以放置停靠小部件的区域。默认值为 Qt::AllDockWidgetAreas。

  • Qt::LeftDockWidgetArea
  • Qt::RightDockWidgetArea
  • Qt::TopDockWidgetArea
  • Qt::BottomDockWidgetArea
  • Qt::AllDockWidgetAreas
  • Qt::NoDockWidgetArea

2、features : DockWidgetFeatures

停靠小部件是否可移动、可关闭和可浮动。

默认为 DockWidgetClosable、DockWidgetMovable 和 DockWidgetFloatable 的组合。

3、floating : bool

停靠小部件是否浮动。默认为 true。

浮动停靠小部件作为其父 QMainWindow“顶层”的独立窗口呈现给用户,而不是停靠在 QMainWindow 中。

4、windowTitle : QString

停靠小部件标题。

四、成员函数

1、【信号】void allowedAreasChanged(Qt::DockWidgetAreas allowedAreas)

当 allowedAreas 属性更改时,会发出此信号。allowedAreas 给出属性的新值。

2、【信号】void dockLocationChanged(Qt::DockWidgetArea area)

当停靠小部件移动到另一个停靠区域或移动到其当前停靠区域中的不同位置时,会发出此信号。 当停靠小部件以编程方式移动或被用户拖动到新位置时,就会发生这种情况。

3、【信号】void featuresChanged(QDockWidget::DockWidgetFeatures features)

当 features 属性更改时会发出此信号。features 给出了属性的新值。

4、【信号】void topLevelChanged(bool topLevel)

当 floating 属性发生变化时会发出此信号。参数为当前停靠小部件是否是浮动的。

5、【信号】void visibilityChanged(bool visible)

当停靠小部件变得可见(或不可见)时,会发出此信号。

6、void initStyleOption(QStyleOptionDockWidget *option)

使用此 QDockWidget 中的值初始化选项。 当子类需要 QStyleOptionDockWidget,但又不想自己填写所有信息时,此方法很有用。

7、bool isAreaAllowed(Qt::DockWidgetArea area)

停靠小部件是否可以放置在区域 area 中。

8、void setTitleBarWidget(QWidget *widget) / QWidget * titleBarWidget()

将任意小部件设置为停靠小部件的标题栏。如果 widget 为 nullptr,则之前在停靠小部件上设置的任何自定义标题栏小部件都将被移除,但不会被 delete,而是将使用默认标题栏。

如果设置了标题栏小部件,QDockWidget 在浮动时将不会使用原生窗口装饰。

以下是实现自定义标题栏的一些提示:

标题栏小部件未明确处理的鼠标事件必须通过调用 QMouseEvent::ignore() 来忽略。然后这些事件传播到 QDockWidget 父级,它以通常的方式处理它们,在拖动标题栏时移动,在双击时停靠和取消停靠等。

当 QDockWidget 上设置 DockWidgetVerticalTitleBar 时,标题栏小部件会相应地重新定位。 在 resizeEvent() 中,标题栏应该检查它应该假设的方向:

  1. QDockWidget *dockWidget = qobject_cast<QDockWidget*>(parentWidget());
  2. if (dockWidget->features() & QDockWidget::DockWidgetVerticalTitleBar) {
  3. // 需要垂直
  4. } else {
  5. // 需要水平
  6. }

标题栏部件必须有一个有效的 QWidget::sizeHint() 和 QWidget::minimumSizeHint()。这些功能应该考虑到标题栏的当前方向。

使用 qobject_cast(),标题栏小部件可以完全访问其父 QDockWidget。 因此,它可以响应用户操作执行诸如停靠和隐藏等操作。

9、void setWidget(QWidget *widget) / QWidget * widget()

设置停靠小部件的中心小部件。

注意,在调用这个函数之前必须添加 widget 的布局;如果没有布局,小部件将不可见。

10、QAction *toggleViewAction()

返回可以添加到菜单和工具栏的可检查动作,以便用户可以显示或关闭此停靠小部件。

动作的文本设置为停靠小部件的窗口标题。

注意:该动作不能用于以编程方式显示或隐藏停靠小部件。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

QMainWindow

一、描述

QMainWindow 类提供了一个主应用程序窗口。

主窗口为构建应用程序的用户界面提供了一个框架。Qt 有 QMainWindow 及其相关的主窗口管理类。QMainWindow 有自己的布局,可以在其中添加 QToolBar(可添加多个)、QDockWidget(可添加多个)、QMenuBar 和 QStatusBar。布局有一个中心区域,可以被任何类型的小部件占据。如下图:

 

注意:不支持创建没有中央小部件的主窗口。即使只是一个占位符,也必须有一个中央小部件。

二、类型成员

1、enum QMainWindow::DockOption:此枚举包含指定 QMainWindow 的停靠行为的标志。

  • AnimatedDocks:与 animated 属性相同。
  • AllowNestedDocks:与 dockNestingEnabled 属性相同。
  • AllowTabbedDocks:用户可以将一个停靠小部件放在另一个停靠小部件的“顶部”。这两个小部件堆叠在一起,并出现一个选项卡栏,用于选择哪个是可见的。
  • ForceTabbedDocks:每个停靠区都包含一个标签式停靠小部件堆栈。即停靠小部件不能在停靠区域中彼此相邻放置。如果设置了此选项,则 AllowNestedDocks 无效。
  • VerticalTabs:主窗口两侧的两个垂直停靠区垂直显示它们的选项卡。如果未设置此选项,则所有停靠区域都在底部显示其选项卡。
  • GroupedDragging:当拖动停靠栏的标题栏时,所有与它一起标记的选项卡都将被拖动。如果某些 QDockWidgets 在允许的区域中有限制,则无法正常工作。

这些选项仅控制如何将停靠小部件拖放到 QMainWindow 中。 它们不会重新排列停靠小部件以符合指定的选项。出于这个原因,应该在将任何停靠小部件添加到主窗口之前设置它们。 AnimatedDocks 和 VerticalTabs 选项除外,它们可以随时设置。

三、属性成员

1、animated : bool

停靠小部件和工具栏是否动画。

当一个停靠小部件或工具栏被拖到主窗口上时,主窗口会调整其内容以指示停靠小部件或工具栏将停靠在哪里。

设置此属性会使 QMainWindow 以平滑的动画移动其内容。

默认为 true。如果主窗口包含在调整大小或重新绘制自身时很慢的小部件,则可能会被设为 false。

设置此属性与使用 setDockOptions() 设置 AnimatedDocks 选项相同。

2、dockNestingEnabled : bool

是否可以嵌套停靠小部件。

如果此属性为 false,则停靠区域只能包含单行(水平或垂直)停靠小部件。 如果此属性为 true,则停靠小部件占用的区域可以在任一方向上拆分以包含更多停靠小部件。

设置此属性与使用 setDockOptions() 设置 AllowNestedDocks 选项相同。

3、dockOptions : DockOptions

停靠选项,默认值为 AnimatedDocks | AllowTabbedDocks。

4、documentMode : bool

选项卡式停靠小部件的选项卡栏是否设置为文档模式。默认为 false。

5、iconSize : QSize

工具栏图标的大小。默认为 GUI 样式的默认工具栏图标大小。使用的图标必须至少具有此大小,因为图标仅按比例缩小。

6、tabShape : QTabWidget::TabShape

用于选项卡式停靠小部件的选项卡形状。默认为 QTabWidget::Rounded。

  • QTabWidget::Rounded:选项卡以圆形外观绘制。
  • QTabWidget::Triangular:选项卡以三角形外观绘制。

7、toolButtonStyle : Qt::ToolButtonStyle

主窗口中工具栏按钮的样式。

要使工具按钮的样式遵循系统设置,则设置为 Qt::ToolButtonFollowStyle。在 Unix 上,将使用来自桌面环境的用户设置。在其他平台上,Qt::ToolButtonFollowStyle 仅表示图标。

默认值为 Qt::ToolButtonIconOnly。

enum Qt::ToolButtonStyle:工具按钮的样式,描述按钮的文本和图标应如何显示。

  • Qt::ToolButtonIconOnly:只显示图标。
  • Qt::ToolButtonTextOnly:只显示文本。
  • Qt::ToolButtonTextBesideIcon:文本出现在图标旁边。
  • Qt::ToolButtonTextUnderIcon:文本出现在图标下方。
  • Qt::ToolButtonFollowStyle:跟随样式。

8、unifiedTitleAndToolBarOnMac : bool

窗口是否使用 macOS 上统一的标题和工具栏外观。

四、成员函数

1、【信号】void iconSizeChanged(const QSize &iconSize)

当窗口中使用的图标大小发生变化时,会发出此信号。参数为新的图标大小。

2、【信号】void tabifiedDockWidgetActivated(QDockWidget *dockWidget)

当通过选择选项卡激活选项卡式停靠小部件时会发出此信号。

3、【信号】void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)

当窗口中用于工具按钮的样式发生更改时,将发出此信号。

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

将给定的停靠小部件添加到指定区域。

enum Qt::DockWidgetArea:

  • Qt::LeftDockWidgetArea
  • Qt::RightDockWidgetArea
  • Qt::TopDockWidgetArea
  • Qt::BottomDockWidgetArea
  • Qt::AllDockWidgetAreas
  • Qt::NoDockWidgetArea
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)

以方向指定的方向将停靠小部件添加到给定区域。

void removeDockWidget(QDockWidget *dockwidget)

从主窗口布局中移除停靠小部件并将其隐藏。停靠小部件不会被 delete。

5、void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)

将工具栏添加到此主窗口中的指定区域。

enum Qt::ToolBarArea:

  • Qt::LeftToolBarArea
  • Qt::RightToolBarArea
  • Qt::TopToolBarArea
  • Qt::BottomToolBarArea
  • Qt::AllToolBarAreas
  • Qt::NoToolBarArea
void addToolBar(QToolBar *toolbar)

相当于调用 addToolBar(Qt::TopToolBarArea, toolbar)。

QToolBar * addToolBar(const QString &title)

创建一个 QToolBar 对象,将其窗口标题设置为 title,并将其插入顶部工具栏区域。

6、void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)

使 area 的工具栏在界面上另起一行显示(添加中断)。

  

7、void setCentralWidget(QWidget *widget) / QWidget * centralWidget()

设置主窗口的中心小部件。QMainWindow 拥有小部件的所有权并在适当的时候将其删除。

QWidget * takeCentralWidget()

从主窗口中删除中央小部件。被移除的小部件的所有权被传递给调用者。

8、void setCorner(Qt::Corner corner, Qt::DockWidgetArea area)

  • Qt::DockWidgetArea corner(Qt::Cornercorner)

将给定的停靠小部件区域设置为占据指定的角落。

  • Qt::TopLeftCorner
  • Qt::TopRightCorner
  • Qt::BottomLeftCorner
  • Qt::BottomRightCorner

9、【virtual】QMenu *createPopupMenu()

返回一个弹出菜单,其中包含主窗口中工具栏和停靠小部件的可选中(checkable)条目。如果不存在工具栏和停靠小部件,则此函数返回 nullptr。

默认情况下,当用户激活上下文菜单(通常通过右键单击工具栏或停靠小部件)时,主窗口会调用此函数。

如果要创建自定义弹出菜单,应重新实现此函数并返回新创建的弹出菜单。弹出菜单的所有权转移给调用者。

10、Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget)

返回 dockwidget 的 Qt::DockWidgetArea。如果dockwidget还没有被添加到主窗口,这个函数返回Qt::NoDockWidgetArea。

11、void insertToolBar(QToolBar *before, QToolBar *toolbar)

将工具栏 toolbar 插入到工具栏 before 所占据的区域中,使其出现在 before 之前。

void insertToolBarBreak(QToolBar *before)

在 before 指定的工具栏之前插入一个工具栏中断(换行显示)。

void removeToolBar(QToolBar *toolbar)

从主窗口布局中移除工具栏并将其隐藏。工具栏不会被 delete。

void removeToolBarBreak(QToolBar *before)

删除之前在之前指定的工具栏之前插入的工具栏中断。

Qt::ToolBarArea toolBarArea(const QToolBar *toolbar)

返回工具栏的 Qt::ToolBarArea。如果工具栏没有被添加到主窗口,则返回 Qt::NoToolBarArea。

bool toolBarBreak(QToolBar *toolbar)

返回 toolbar 之前是否有工具栏中断。

12、QMenuBar *menuBar() / void setMenuBar(QMenuBar *menuBar)

返回主窗口的菜单栏。 如果菜单栏不存在,此函数创建并返回一个空菜单栏。

如果想让一个Mac应用程序中的所有窗口共享一个菜单栏,不要使用这个函数来创建它,因为这里创建的菜单栏会让 QMainWindow 作为它的父级。必须创建一个没有父级的菜单栏,然后可以在所有 Mac 窗口之间共享该菜单栏:

  1. QMenuBar *menuBar = new QMenuBar(nullptr);
  2. void setMenuWidget(QWidget *menuBar) / QWidget * menuWidget()

将主窗口的菜单栏设置为 menuBar。

QMainWindow 取得 menuBar 指针的所有权,并在适当的时候将其删除。

13、void resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)

将 docks 列表中的停靠小部件的大小调整为 sizes 列表中的相应大小(以像素为单位)。

如果方向是 Qt::Horizontal,则调整宽度,否则调整停靠小部件的高度。

不会调整 QMainWindow 本身的大小。任何额外/缺失的空间都根据尺寸的相对权重分布在小部件之间。

resizeDocks({blueWidget, yellowWidget}, {20 , 40}, Qt::Horizontal);

14、bool restoreDockWidget(QDockWidget *dockwidget)

如果在调用 restoreState() 后创建了 dockwidget,则恢复它的状态。返回状态是否已恢复。

15、QByteArray saveState(int version = 0)

保存此主窗口的工具栏和停靠小部件的当前状态。这包括可以使用 setCorner() 设置的角落设置。 版本号作为数据的一部分存储。

objectName 属性用于标识每个 QToolBar 和 QDockWidget。应该确保此属性对于添加到 QMainWindow 的每个 QToolBar 和 QDockWidget 都是唯一的。

要恢复保存的状态,请将返回值和版本号传递给 restoreState()。

要在窗口关闭时保存几何图形,可以实现如下关闭事件:

  1. void MyMainWindow::closeEvent(QCloseEvent *event)
  2. {
  3. QSettings settings("MyCompany", "MyApp");
  4. settings.setValue("geometry", saveGeometry());
  5. settings.setValue("windowState", saveState());
  6. QMainWindow::closeEvent(event);
  7. }
  8. bool restoreState(const QByteArray &state, int version = 0)

恢复此主窗口的工具栏和停靠小部件的状态。也恢复角落设置。

版本号与存储在状态中的版本号进行比较。如果它们不匹配,则主窗口的状态保持不变且返回 false;否则状态将恢复且返回 true。

要恢复使用 QSettings 保存的几何图形,可以使用如下代码:

  1. void MainWindow::readSettings()
  2. {
  3. QSettings settings("MyCompany", "MyApp");
  4. restoreGeometry(settings.value("myWidget/geometry").toByteArray());
  5. restoreState(settings.value("myWidget/windowState").toByteArray());
  6. }

16、void setStatusBar(QStatusBar *statusbar) / QStatusBar * statusBar()

设置状态栏。将状态栏设置为 nullptr 会将其从主窗口中删除。QMainWindow 拥有状态栏指针的所有权并在适当的时候将其删除。

17、void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)

QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area)

将给定停靠小部件区域的选项卡位置设置为指定的 tabPosition。默认情况下,所有停靠区域都在底部显示它们的选项卡。

注意:VerticalTabs 停靠选项会覆盖此方法设置的选项卡位置。

18、void splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)

将第一个停靠小部件覆盖的空间分成两部分,将第一个停靠小部件移动到第一部分,并将第二个停靠小部件移动到第二部分。

方向指定空间的划分方式:Qt::Horizontal 拆分将第二个停靠小部件放置在第一个的右侧; Qt::Vertical 拆分将第二个停靠小部件放置在第一个下方。

注意:如果 first 当前位于选项卡式停靠区域中,则 second 将作为新选项卡添加,而不是作为 first 的邻居。这是因为单个选项卡只能包含一个停靠小部件。

19、QList<QDockWidget *> tabifiedDockWidgets(QDockWidget *dockwidget)

返回与 dockwidget 一起标记的停靠小部件。

 

20、void tabifyDockWidget(QDockWidget *first, QDockWidget *second)

将停靠小部件 second 移动到停靠小部件 first 的顶部,在主窗口中创建一个选项卡式停靠区域。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

原文链接:https://blog.csdn.net/kenfan1647/article/details/123327824

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/615914
推荐阅读
相关标签
  

闽ICP备14008679号