QDockWidget-窗体停靠
DockWidget只能放到QMainWindow里面
头文件
#include <QDockWidget>
QDockWidget是QWidget的子类,它生成那些可以停靠到视窗边缘并自适应大小的widget
// 创建第一个DockWidget
QDockWidget* dock1 = new QDockWidget(u8"窗口1", this);
//设置特性
//设置特性 dock1->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
常量 描述
| 常量 | 描述 |
| QDockWidget::DockWidgetClosable | 可关闭 |
| QDockWidget::DockWidgetMovable | 可移动 |
| QDockWidget::DockWidgetFloatable | 可漂浮 |
| QDockWidget::DockWidgetVerticalTitleBar | 在左边显示垂直的标签栏 |
| QDockWidget::AllDockWidgetFeatures | 具有1,2,3的所有功能 |
| QDockWidget::NoDockWidgetFeatures | 无法关闭,不能移动,不能漂浮 |
setWidget
dock1->setWidget(new QTextEdit);
// 设置允许停靠的区域,默认为所有区域
// 设置允许停靠的区域,默认为所有区域
dock1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea|Qt::BottomDockWidgetArea);
enum DockWidgetArea { LeftDockWidgetArea = 0x1, RightDockWidgetArea = 0x2, TopDockWidgetArea = 0x4, BottomDockWidgetArea = 0x8, DockWidgetArea_Mask = 0xf, AllDockWidgetAreas = DockWidgetArea_Mask, NoDockWidgetArea = 0 };
//isFloating:检查停靠窗口是否在浮动状态
//isFloating:检查停靠窗口是否在浮动状态 bool IsVisible = dock1->isFloating();
//setWindowTitle:设置停靠窗口的标题
//setWindowTitle:设置停靠窗口的标题 dock1->setWindowTitle("123");
//close:关闭停靠窗口
//close:关闭停靠窗口 dock1->close();
布局
1. addDockWidget:添加停靠控件,用于指定或更改停靠控件的位置以及方向
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget) void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget, Qt::Orientation orientation)
addDockWidget(Qt::LeftDockWidgetArea, dock1);
停止位置枚举:
enum DockWidgetArea { LeftDockWidgetArea = 0x1,//可在主窗口的左侧停靠。 RightDockWidgetArea = 0x2,//可在主窗口的右侧停靠 TopDockWidgetArea = 0x4,//可在主窗口的顶端停靠。 BottomDockWidgetArea = 0x8,//可在主窗口的底部停靠 DockWidgetArea_Mask = 0xf, AllDockWidgetAreas = DockWidgetArea_Mask,//可在主窗口任意(以上四个)部位停靠 NoDockWidgetArea = 0//只可停靠在插入处 };
2. splitDockWidget:分割窗口,用于对两个QDockWidget进行水平或垂直布局,做成类似QSplit的功能。
void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)
使用
splitDockWidget(dock1, dock3, Qt::Vertical);//垂直 // 将dock3放置在dock1的下方 splitDockWidget(dock1, dock3, Qt::Horizontal);//水平 // 将dock3放置在dock1的右边
3. tabifyDockWidget:合并窗口,用于将多个QDockWidget变成一个tab形式的叠加窗体。
void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)
使用
tabifyDockWidget(dock1, dock2);
关闭后重新显示出来
当 QDockWidget 被关闭后,它只是从界面上隐藏了起来,并没有被销毁
|
直接调用 |
直接调用 QWidget 的 show() 方法使其可见 |
dock3->show();
调用后,会在它被关闭的地方重新显示出来
对象未被销毁:请放心,只要你不是手动 delete这个 QDockWidget指针,而只是点击了标题栏的关闭按钮,那么它就一直存在于内存中,可以随时被重新显示
已经显示出来了,想修改位置
// 移除当前的dock widget removeDockWidget(dock3); // 重新添加到指定位置 addDockWidget(Qt::BottomDockWidgetArea, dock3); //重新显示出来 dock3->show();
参考博客:https://blog.csdn.net/p942005405/article/details/102056954

浙公网安备 33010602011771号