【QT】QDockWidget控件的使用

目录

1.概述

2.常用函数介绍

3.QDockWidget布局相关

4.QDockWidget的使用注意事项

5.使用场景

6.简单应用示例代码

1.概述

QDockWidget类提供了一个小部件,可以停靠在QMainWindow中,也可以作为桌面上的顶级窗口浮动。
QDockWidget提供了dock Widget的概念,也称为工具选项板或实用程序窗口。停靠窗口是放置在QMainWindow中心小部件周围的停靠小部件区域中的辅助窗口。停靠窗口可以在其当前区域内移动,移动到新区域,并由最终用户浮动(例如,取消停靠)。QDockWidget API允许程序员限制dock小部件移动、浮动和关闭的能力,以及它们可以放置的区域。
QDockWidget 的主要特点:
1. 停靠功能:QDockWidget 允许用户将窗口部件停靠在主窗口的各个位置,如左侧、右侧、上方或下方。
2. 浮动窗口:用户还可以将 QDockWidget 拖动到独立的浮动窗口中。
3. 可关闭:QDockWidget 可以关闭,允许用户根据需要隐藏或显示它。
4. 自定义部件:你可以将自定义的部件放在 QDockWidget 中,以构建自定义的界面元素。

2.常用函数介绍

QDockWidget 类提供了一系列函数,用于配置和管理停靠式窗口的行为和外观。以下是一些常用的 QDockWidget 函数的介绍和使用方法:
1.setWidget:设置停靠窗口中的部件
QDockWidget dockWidget("标题", &mainWindow);
QWidget *customWidget = new QWidget;
dockWidget.setWidget(customWidget);
2.setAllowedAreas:设置允许停靠的区域
dockWidget.setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
3.setFeatures:设置停靠窗口的功能特性,如关闭按钮、可浮动等
dockWidget.setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable);
4.setWindowTitle:设置停靠窗口的标题
dockWidget.setWindowTitle("My Dock Widget");
5.setVisible:设置停靠窗口的可见性
dockWidget.setVisible(true); // 显示停靠窗口
6.isFloating:检查停靠窗口是否在浮动状态
bool isFloating = dockWidget.isFloating();
7.close:关闭停靠窗口
dockWidget.close();
8.toggleViewAction:获取一个 QAction 对象,用于在工具栏中切换停靠窗口的可见性
QAction *toggleAction = dockWidget.toggleViewAction();
toolBar->addAction(toggleAction);
9.topLevelChanged 信号:在停靠窗口的浮动状态发生变化时触发
QObject::connect(&dockWidget, &QDockWidget::topLevelChanged, [&](bool floating) {
if (floating) {
qDebug() << "窗口已浮动";
} else {
qDebug() << "窗口已停靠";
}
});
这些函数可以帮助你配置 QDockWidget 控件的各种属性,包括设置停靠区域、标题、可见性、功能特性等。你还可以使用 toggleViewAction 函数来创建一个切换停靠窗口可见性的操作,以便用户可以通过工具栏切换窗口的显示状态。topLevelChanged 信号可以用于监测停靠窗口的浮动状态的变化。根据应用程序的需求,你可以使用这些函数来自定义停靠窗口的行为和外观。

3.QDockWidget布局相关

  • 停靠特性
setFeatures()方法设置停靠窗体的特性,参数QDockWidget::DockWidgetFeatures指定停靠窗体的特性,包括以下几种参数。
① QDockWidget::DockWidgetClosable:停靠窗体可关闭。
② QDockWidget::DockWidgetMovable:停靠窗体可移动。
③ QDockWidget::DockWidgetFloatable:停靠窗体可浮动。
④ QDockWidget::AllDockWidgetFeatures:此参数表示拥有停靠窗体的所有特性。
⑤ QDockWidget::NoDockWidgetFeatures:不可移动、不可关闭、不可浮动。
  • 停靠区域
setAllowedAreas()方法设置停靠窗体可停靠的区域,参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括以下几种参数。
① Qt::LeftDockWidgetArea:可在主窗口的左侧停靠。
② Qt::RightDockWidgetArea:可在主窗口的右侧停靠。
③ Qt::TopDockWidgetArea:可在主窗口的顶端停靠。
④ Qt::BottomDockWidgetArea:可在主窗口的底部停靠。
⑤ Qt::AllDockWidgetArea:可在主窗口任意(以上四个)部位停靠。
⑥ Qt::NoDockWidgetArea:只可停靠在插入处。
  • 添加dock
addDockWidget()方法用于添加dock,给dock指定位置,同时也可以更改dock的位置。
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget)
  • 分割dock
splitDockWidget()方法用于分割dock窗口,是把两个dock进行左右或上下并排布置,做成一个类似QSplit的功能,分割原则是:水平从左到右,竖直从上到下。
void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)
  • dock tab化窗口
tabifyDockWidget()方法用于tab化窗口,把多个dock变成一个tab形式的窗体。
void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)
  • 初始化大小
靠左右布局的QDockWidget的高度是自适应的,宽度需要初始化设置,同理靠上下布局的高度需要初始化设置。使用splitDockWidget分割、tabifyDockWidget tab化窗口的QDockWidget的初始化大小与其依赖的QDockWidget(参数first)初始化大小一样。
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在多行或多列时初始化高宽无效问题!
使用setFeatures、setAllowedAreas、addDockWidget、splitDockWidget、tabifyDockWidget、resizeDocks可以满足基本的Dock布局了。
  • 标题栏设置
去掉标题栏,但是不能拖动了。
QWidget *Widget = new QWidget;
ui->dockwidget_dockWidget_1->setTitleBarWidget(Widget);
自定义QWidget即可以自定义标题栏。
  • 标题栏竖起
ui->dockwidget_dockWidget_6->setFeatures(QDockWidget::DockWidgetVerticalTitleBar);

4.QDockWidget的使用注意事项

1. 容器空间的设置
当QDockWidget和其他QWidget(比如QFrame、QLayout等)一起使用时,必须保证这些QWidget的容器空间(容器的大小和位置)是正确的。要使用setWidget()函数将QWidget添加到QDockWidget中,或者直接使用构造函数初始化QDockWidget,但是需要注意QWidget的大小和位置。
2. 可停靠区域的控制
QDockWidget可以通过setAllowedAreas()函数来控制停靠的区域。在设置之前,必须先调用mainWindow()函数获取主窗口对象,然后利用主窗口的setDockOptions()函数设置最大化和自动扩展区域。同时要根据实际情况设置QDockWidget和其他QMainWindow的layout,从而保证它们的位置和大小是正确的。
3. 内存泄露问题
当QDockWidget被从主窗口中移除时,需要通过delete函数显式地销毁它。如果没有显式销毁,可能会导致内存泄露问题。

5.使用场景

以下是 QDockWidget 的一些常见使用场景:
  • 工具栏:将各种工具按钮、复选框、文本框等组合成一个可停靠的工具栏,方便用户使用。
  • 属性窗口:显示选中对象的各种属性,如颜色、大小、边框、位置等,便于用户对其进行编辑。
  • 输出窗口:显示应用程序的输出信息、错误信息、调试信息等,便于用户了解应用程序的运行状态。
  • 工程浏览器:显示项目文件、文件夹、类、函数等信息的面板,方便用户导航和查找。
  • 日志窗口:记录应用程序的操作日志、错误日志等信息,方便用户了解应用程序的运行情况和排查错误。

6.简单应用示例代码

#include "main_window.h"
#include <QDockWidget>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this->setWindowTitle("停靠窗口");this->setFixedSize(600, 400);QTextEdit *pTextEdit = new QTextEdit(this);pTextEdit->setText("主窗口测试");pTextEdit->setAlignment(Qt::AlignLeft);this->setCentralWidget(pTextEdit);//停靠窗口实现QDockWidget *pDock = new QDockWidget("停靠窗口1", this);pDock->setFeatures(QDockWidget::DockWidgetMovable);pDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);QTextEdit *pText1 = new QTextEdit(this);pText1->setText("你好");pDock->setWidget(pText1);this->addDockWidget(Qt::RightDockWidgetArea, pDock);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/232239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EMC测试与整改实践?|深圳比创达电子

电磁兼容(EMC)测试和整改是当今社会对电磁兼容(EMC)意识日益深入的表现&#xff0c;EMC测试与整改随着社会对电磁环境要求的不断提高&#xff0c;越来越受到重视&#xff0c;下面就EMC测试与整改实践进行一下详细介绍。 一、什么是EMC测试&#xff1f; EMC测试是指在一定的电…

减速机振动相关标准 - 笔记

参考标准&#xff1a;国家标准|GB/T 39523-2020 减速机的振动标准与发动机不同&#xff0c;摘引&#xff1a; 原始加速度传感器波形 可以明显看到调幅波 它的驱动电机是300Hz~2000Hz范围的。这个采样时间是5秒&#xff0c;看分辨率至少1024线。可分出500条谱线。 频谱部分 …

干货分享 | 如何在TSMaster中对常用总线报文信号进行过滤?

TSMaster软件平台支持对不同总线&#xff08;CAN、LIN、FlexRay&#xff09;的报文和信号过滤&#xff0c;过滤方法一般有全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤&#xff0c;针对不同的总线信号过滤器的使用方法也基本相同。今天重点和大家分享一下关于T…

魔众文库系统v5.8.0版本发布:水印、分类与移动端升级,打造更高效文档管理体验

魔众文库系统迎来了全新的v5.8.0版本更新&#xff01;此次更新不仅对水印功能进行了升级&#xff0c;还新增了辅助分类样式&#xff0c;同时优化了移动端体验。让我们一起来看看这次更新的亮点吧&#xff01; 一、水印功能全新升级 在v5.8.0版本中&#xff0c;魔众文库系统的…

Spring学习?这一篇文章就够,史上最全!

文章目录 前言一、IOC概述及底层原理1.概述和原理 二、思路分析三、IOC操作bean管理&#xff08;基于xml&#xff0c;使用的是IDEA2022.3.3&#xff0c;maven仓库&#xff09;1.xml实现bean管理&#xff08;1&#xff09;创建对象&#xff08;2&#xff09;注入属性&#xff08…

[HTML]Web前端开发技术3(HTML5、CSS3、JavaScript )超链接,target,scrolling,marginwidth,frameborder,iframe——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

c语言:[输出函数]与[输入函数]|要点简述

一、【输出函数】 printf() 与 puts()的不同点 1、printf()函数 printf()支持单个字符%c的输出&#xff0c;以及字符串%s的输出。 (1)如果是以%c的形式输出&#xff0c;是一个字符一个字符的输出。因此&#xff0c;要用一个循环语句&#xff0c;把字符逐个输出。 (2)而用%…

骨传导耳机和气传导耳机有什么区别?谁更值得入手?

先说答案&#xff0c;骨传导耳机和气传导耳机的佩戴方式和传声方式不同&#xff0c;并且骨传导耳机相比于气传导耳机更值得入手。 一、骨传导耳机和气传导耳机有什么区别 1、佩戴方式不同 骨传导耳机采用一体式耳挂佩戴或耳夹式佩戴&#xff0c;气传导耳机采用分体式耳挂设计…

羊大师揭秘,皮肤保湿不如喝点羊奶?

羊大师揭秘&#xff0c;皮肤保湿不如喝点羊奶&#xff1f; 在寒冷的冬季&#xff0c;人们常常会发现自己的皮肤变得干燥、粗糙&#xff0c;甚至出现裂纹。而这时候&#xff0c;大家或许很难联想到喝点羊奶能够改善这一问题。但是小编羊大师发现&#xff0c;事实上羊奶确实可以…

前端开发中的webpack打包工具

前端技术发展迅猛&#xff0c;各种可以提高开发效率的新思想和框架层出不穷&#xff0c;但是它们都有一个共同点&#xff0c;即源代码无法直接运行&#xff0c;必须通过转换后才可以正常运行。webpack是目前主流的打包模块化JavaScript的工具之一。 本章主要涉及的知识点有&am…

高中python语言常用语句,高中python教程标准

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;高中python语言常用语句&#xff0c;高中python教程标准&#xff0c;现在让我们一起来看看吧&#xff01; 大家好&#xff0c;本文将围绕高中python语言常用语句展开说明&#xff0c;高中python例题和答案是一个很多人都…

Axure之交互与情节与一些实例

目录 一.交互与情节简介 二.ERP登录页到主页的跳转 三.ERP的菜单跳转到各个页面的跳转 四.省市联动 五.手机下拉加载 今天就到这里了&#xff0c;希望帮到你哦&#xff01;&#xff01;&#xff01; 一.交互与情节简介 "交互"通常指的是人与人、人与计算机或物体…

第二证券:股票交易时间以及规则是什么?

股票生意时间以及规则是什么&#xff1f; 1、股票生意时间 周一至周五上午9&#xff1a;30-11:30&#xff0c;下午13:00-15:00&#xff0c;周末以及法定节假日休市不进行生意。可是不生意不代表不能进行托付&#xff0c;股票在清算之后投资者就能够进行托付。股票的清算时间&…

一招教你将logo背景变透明,省时又方便!

透明背景的Logo可以与不同的背景颜色或图像融合&#xff0c;而不会出现突兀或不协调的感觉&#xff0c;这使得Logo在各种媒体和设计中更加灵活和多用途&#xff0c;想要把图片去背景变透明的方法有很多&#xff0c;比如最常见的就是利用ps软件来处理&#xff0c;不过这个图片去…

308 Permanent Redirect的一种可能解决方案:检查一下请求路径

两条斜线导致请求可能自动定向到https了&#xff1f;反正给改成一条斜线就好了

我的4096创作纪念日

机缘 岁月如梭&#xff0c;时光一晃已经在CSDN扎根4096天了。第一次注册CSDN好像还是在2012年&#xff0c;那会还没大学毕业。初入CSDN&#xff0c;只是把他当作自己编程时遇到问题的在线笔记记录而已&#xff0c;没想到无意间还帮助了其他遇到同样问题困扰的同学。而在这4096…

uni-data-checkbox无法选中

问题描述 今天在使用uni-data-checkbox时候发现文字选中了&#xff0c;单选的小圆圈没有出来。在浏览器模拟手机显示的效果和在安卓手机上显示的效果都和下面的图一样。 错误代码 <uni-data-checkbox mode"list" v-model"chooseLanguage" :localdata…

【CCF CSP】202312-2 因子化简(C/C++解题思路+满分题解)

解题思路 80分思路代码 由于题目在数据规模中说明阈值k > 1, 因此提取因式时只需要关注次数在二次以上的因式。也就是说&#xff0c;我们只需要判断从1到待化简因式的平方根是否是满足题意的因式即可。举个例子&#xff0c;假设题目所给因式是10000&#xff0c;那么只需要判…

docker 限制ip访问端口

需求限制外网访问 docker的某个服务 经过查找 发现 ubuntu的 ufw 防火墙是无效的 技术交流http://idea.coderyj.com/ 1.查看docker的 路由 iptables --line -nvL DOCKER-USER默认是允许所有的访问不限制 2.添加限制规则 iptables 是从上往下匹配的所以我们限制规则要在第一条 …

格密码与线性代数

目录 一. 幺模矩阵 二. Gram-Schmidt 正交化 三. 矩阵分解 四. 格基本区 五. 对偶格基 六. 矩阵伪逆 七. 正定矩阵 八. 矩阵转置 九. 奇异值分解&#xff08;SVD分解&#xff09; 格密码中格基是矩阵&#xff0c;格点是向量。本文章梳理一些格密码常用到的一些线性代数…