Qt QDockWidget的使用

Qt QDockWidget的使用

QDockWidgetQDockWidget是一个可以停靠在QMainWindow内的窗口控件,它可以保持浮动状态或在指定位置作为子窗口附加到主窗口中。停靠窗口QDockWidget类是应用程序中经常用到的,设置停靠窗口的一般流程如下。
  1. 创建一个QDockWidget对象的停靠窗体。
  2. 设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法。
  3. 新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit。
  4. 将控件插入停靠窗体,调用QDockWidget的setWidget()方法。
  5. 使用addDockWidget()方法在MainWindow中加入此停靠窗体。

一、停靠区域

在这里插入图片描述

setAllowedAreas()设置停靠窗体可停靠的区域

参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括一下几种参数

参数说明
Qt::LeftDockWidgetArea在窗口的左侧停靠
Qt::RightDockWidgetArea在窗口的右侧停靠
Qt::TopDockWidgetArea在窗口的顶端停靠
Qt::BottomDockWidgetArea在窗口的底部停靠
Qt::AllDockWidgetArea可在窗口任意(以上四个)部位停靠
Qt::NoDockWidgetArea只可停靠在插入处
dockWidgetOperation->setAllowedAreas(Qt::RightDockWidgetArea);//设置DockWidget停靠在窗口右侧

setCorner()设置四个角落的归属

this->setCorner(Qt::TopLeftCorner,Qt::LeftDockWidgetArea);//将左上角分配给左侧区域
this->setCorner(Qt::BottomLeftCorner,Qt::LeftDockWidgetArea);//将左下角分配给左侧区域
this->setCorner(Qt::TopRightCorner,Qt::RightDockWidgetArea);//将右上角分配给右侧区域
this->setCorner(Qt::BottomRightCorner,Qt::RightDockWidgetArea);//将右下角分配给右侧区域
this->setCorner(Qt::TopLeftCorner,Qt::TopDockWidgetArea);//将左上角分配给顶部区域
this->setCorner(Qt::BottomLeftCorner,Qt::BottomDockWidgetArea);//将左下角分配给底部区域
this->setCorner(Qt::TopRightCorner,Qt::TopDockWidgetArea);//将右上角分配给顶部区域
this->setCorner(Qt::BottomRightCorner,Qt::TopDockWidgetArea);//将右下角分配给底部区域

二、停靠特性

setFeatures()

设置停靠窗口特性。
参数QDockWidget::DockWidgetFeatures指定停靠窗口的特性。

参数说明
QDockwidget::DockWidgetCloseable停靠窗口可关闭
QDockwidget::DockWidgetMovable停靠窗口可移动
QDockwidget::DockWidgetFloatable停靠窗口可浮动
QDockwidget::DockWidgetVerticalTitleBar标题栏垂直放置
QDockwidget::AllDockWidgetFeatures此参数表示窗口拥有停靠窗体的所有特性
QDockwidget::NoDockWidgetFeatures不可移动,不可关闭,不可浮动

三、添加dock

addDockWidget()

添加dock,给dock指定位置,同时也可以更改dock的位置。

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

例:

this->addDockWidget(Qt::RightDockWidgetArea,dockWidgetOperation);//在窗体右侧添加名为dockWidgetOperation的DockWidget窗体

四、dock分割布局

splitDockWidget()

用于分割dock窗口,是把两个dock进行左右或上下并排布置,做成一个类似QSplit的功能,分割原则是:水平从左到右,竖直从上到下。

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

例:

this->splitDockWidget(topdockWidgetOperation,bottomdockWidgetOperation,Qt::Vertical);//将两个DockWidget垂直布局
this->splitDockWidget(topdockWidgetOperation,bottomdockWidgetOperation,Qt::Horizontal);//将两个DockWidget水平布局

五、将dock 制作为tab窗口

tabifyDockWidget()

用于tab化窗口,把多个dock变成一个tab形式的窗体。

void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)

六、初始化大小

靠左右布局的QDockWidget的高度是自适应的,宽度需要初始化设置,同理靠上下布局的高度需要初始化设置。

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

第一个参数是用来配置是哪个dock窗口需要调整大小;
第二个参数是用来配置dock所占的像素大小,如果配置大于或者小于QMainWindow本身空间,Qt会根据所配置的像素大小的相对权重分配到dock中;
第三个参数用来配置调整的方向,如果为Qt::Horizontal,调整dock宽度,Qt::Vertical调整dock高度,确定了停靠位置后resizeDocks才起作用。
需要注意的是Qt官方文档上有注明这个方法在Qt5.6中引入,所以比Qt5.6低的版本并不能使用本方法。resizeDocks在多行或多列时初始化高宽无效问题!

七、标题栏设置

1.去标题栏

注意:Dockwidget去掉标题栏将不可拖动!

//方法一:
QWidget *Widget = new QWidget;
ui->dockwidget->setTitleBarWidget(Widget);
//方法二:
dockwidget->setTitleBarWidget(new QWidget());

2.设置标题栏

dockWidgetOperation->setWindowTitle(tr("停靠窗口1"));
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中的QDockWidget是一个浮动窗口,可以在主窗口中显示。你可以使用以下方法创建和配置QDockWidget: 1. 创建QDockWidget对象:使用QDockWidget的构造函数创建一个QDockWidget对象,可以设置标题和父对象。例如:QDockWidget *dockWidget = new QDockWidget("浮动", this); 2. 添加到主窗口使用addDockWidget()函数将QDockWidget添加到主窗口的指定区域。例如:addDockWidget(Qt::BottomDockWidgetArea, dockWidget);这将使浮动窗口显示在主窗口的底部。 3. 设置停靠区域:使用setAllowedAreas()函数设置QDockWidget的允许停靠区域,可以限制它只能在指定的上下左右位置停靠。例如:dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);这将限制浮动窗口只能在顶部和底部停靠。 关于工具栏,你可以使用QToolBar来创建和配置工具栏: 1. 创建QToolBar对象:使用QToolBar的构造函数创建一个QToolBar对象,并将其添加到主窗口。例如:QToolBar *toolbar = new QToolBar(this); addToolBar(toolbar);默认情况下,工具栏将显示在上方,但你可以使用addToolBar()函数的第一个参数设置它在想要的地方显示。例如:addToolBar(Qt::LeftToolBarArea, toolbar);这将将工具栏显示在左侧。 2. 设置停靠区域:使用setAllowedAreas()函数设置工具栏允许停靠的区域。例如:toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);这将限制工具栏只能在左侧和右侧停靠。 3. 添加操作和分隔符:使用addAction()函数向工具栏添加操作,使用addSeparator()函数添加分隔符。例如:toolbar->addAction(newAction); toolbar->addSeparator(); toolbar->addAction(openAction);这将向工具栏添加新的操作和一个分隔符。 4. 添加自定义控件:使用addWidget()函数将自定义控件添加到工具栏。例如:QPushButton *btn = new QPushButton("aa", this); toolbar->addWidget(btn);这将在工具栏中添加一个按钮。 综上所述,QDockWidget是一个浮动窗口,可以多个,而工具栏是可以有多个,并且可以设置停靠区域和添加操作或自定义控件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Qt学习(2)菜单栏和工具栏等](https://blog.csdn.net/bareheadedman/article/details/104361888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值