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 被关闭后,它只是从界面上隐藏了起来,并没有被销毁 

直接调用 show()

直接调用 QWidget 的 show() 方法使其可见

dock3->show();

 调用后,会在它被关闭的地方重新显示出来

 对象未被销毁:请放心,只要你不是手动 delete这个 QDockWidget指针,而只是点击了标题栏的关闭按钮,那么它就一直存在于内存中,可以随时被重新显示

 

已经显示出来了,想修改位置

    // 移除当前的dock widget
    removeDockWidget(dock3);
    // 重新添加到指定位置
    addDockWidget(Qt::BottomDockWidgetArea, dock3);
    //重新显示出来
    dock3->show();

 

 

 

参考博客:https://blog.csdn.net/p942005405/article/details/102056954

posted @ 2025-11-26 11:02  家煜宝宝  阅读(8)  评论(0)    收藏  举报