QDockWidget

详细描述

QDockWidget 类提供了一个小部件,它可以停靠在QMainWindow内部,也可以作为桌面上的顶级窗口浮动。

QDockWidget 提供了停靠部件的概念,也称为工具调色板或实用窗口。停靠窗口是放置在 中央部件 周围的停靠部件区域中的辅助窗口,位于 QMainWindow 中。

终端用户可以在当前区域内移动停靠窗口,将其移动到新区域并使其浮动(例如,取消停靠)。QDockWidget API 允许程序员限制停靠窗口的移动、浮动和关闭能力,以及它们可以放置的区域。

外观

一个QDockWidget由标题栏和内容区域组成。标题栏显示停靠部件窗口标题、一个浮动按钮和一个关闭按钮。根据QDockWidget的状态,浮动和关闭按钮可以被禁用或者根本不显示。

标题栏和按钮的视觉外观取决于所使用的样式。

QDockWidget是Qt框架中用于创建可停靠窗口的类。在图形用户界面(GUI)设计中,可停靠窗口允许用户将窗口固定在主窗口的边缘或将其作为独立窗口浮动。QDockWidget充当其子控件(即,设置为setWidget()方法的任何控件)的包装器。

子控件的大小和策略

  1. 自定义大小提示、最小和最大尺寸以及大小策略应该在子控件上实现。这意味着如果你有一个按钮、文本编辑器或其他任何类型的控件作为 QDockWidget 的子控件,你应该在该子控件上设置这些属性,而不是直接在 QDockWidget 上设置。
  2.  QDockWidget 会尊重子控件的这些属性,并根据其自身的边框和标题栏调整其大小约束。例如,如果子控件需要至少100x100像素的空间来显示其内容, QDockWidget 将确保它提供足够的空间,同时还要考虑其额外的边框和标题栏所占用的空间。

不要在 QDockWidget 上设置大小约束

  1. 由于 QDockWidget 的行为取决于它是否被停靠,因此不应该在其上设置大小约束。当一个 QDockWidget 被停靠时,它可能没有边框,标题栏也更小,而当它被浮动时,它会有完整的边框和更大的标题栏。这意味着 QDockWidget 的大小会动态变化,所以直接在 QDockWidget 上设置固定的大小约束是没有意义的,甚至可能会导致布局问题。

总之, QDockWidget 的设计目的是为了适应不同的显示模式(停靠或浮动),并自动处理与子控件相关的布局和大小调整。为了保持布局的灵活性和正确性,所有关于大小和布局的信息都应该在子控件上设置,而不是在 QDockWidget 本身。

成员类型

enum QDockWidget::DockWidgetFeature

flags QDockWidget::DockWidgetFeatures

enum QDockWidget::DockWidgetFeature
Constant Value 描述
QDockWidget::DockWidgetClosable0x01DockWidget可以关闭。在某些系统上,当DockWidget浮动时总是有一个关闭按钮(例如在MacOS 10.5 上)。
QDockWidget::DockWidgetMovable0x02用户可以在各个停靠栏之间移动停靠部件。
QDockWidget::DockWidgetFloatable0x04DockWidget可以从主窗口分离,并作为一个独立的窗口浮动。
QDockWidget::DockWidgetVerticalTitleBar0x08DockWidget在其左侧显示一个垂直标题栏。这可用于增加QMainWindow中的垂直空间量。
QDockWidget::AllDockWidgetFeaturesDockWidgetClosable | DockWidgetMovable | DockWidgetFloatable(已弃用)DockWidget可以关闭、移动和浮动。由于在未来的版本中可能会添加新功能,如果您使用此标志,DockWidget的外观和行为可能会发生变化。请指定单独的标志。
QDockWidget::NoDockWidgetFeatures0x00DockWidget无法关闭、移动或浮动。

DockWidgetFeatures 类型是QFlags的一个类型定义。它存储了 DockWidgetFeature 值的或组合。

属性

allowedAreas : Qt::DockWidgetAreas 

可放置停靠部件的区域

默认值是 Qt::AllDockWidgetAreas 。

 访问函数

Qt::DockWidgetAreasallowedAreas()
voidsetAllowedAreas(Qt::DockWidgetAreas areas)

信号:

void allowedAreasChanged(Qt::DockWidgetAreas allowedAreas)

features : DockWidgetFeatures

此属性决定了停靠部件是否可移动、可关闭和可浮动

默认情况下,此属性设置为可关闭停靠窗口小部件、可移动停靠窗口小部件和可浮动停靠窗口小部件的组合。

访问函数:

DockWidgetFeatures features()
void setFeatures(DockWidgetFeatures features)

信号:

void featuresChanged(QDockWidget::DockWidgetFeatures features)

floating : bool 

此属性表示停靠部件是否浮动

一个浮动的停靠部件以独立窗口的形式呈现给用户,位于其父QMainWindow“之上”,而不是停靠在QMainWindow中。

默认情况下,此属性为true

当此属性发生变化时,会发出 topLevelChanged() 信号。

访问函数:

bool isFloating()
void setFloating(bool floating)

windowTitle : QString

此属性保存停靠小部件的标题(标题栏)

默认情况下,此属性包含一个空字符串。

QStringwindowTitle()
void setWindowTitle(const QString &) 

信号:

void windowTitleChanged(const QString &title)

ui->dockWidget->setWindowTitle("Dock Widget");

浮动效果

 

停靠效果

 成员函数

QDockWidget::QDockWidget(const QString &title, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())

构建一个带有父对象 parent 和窗口标志 flags 的QDockWidget。该停靠部件将放置在左侧停靠部件区域。

窗口标题被设置为title。当QDockWidget停靠和取消停靠时,使用此title。它也用于QMainWindow提供的上下文菜单中。

QDockWidget::QDockWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())

构建一个带有父对象 parent 和窗口标志 flags 的QDockWidget。该停靠部件将放置在左侧停靠部件区域。

QDockWidget::~QDockWidget() 

销毁停靠部件。

void QDockWidget::allowedAreasChanged(Qt::DockWidgetAreasallowedAreas

当允许区域属性发生变化时,会发出此信号。allowedAreas 参数给出该属性的新值。

void QDockWidget::changeEvent(QEvent *event)

从QWidget::changeEvent() 重新实现。

void QDockWidget::closeEvent(QCloseEvent *event)

从QWidget::closeEvent() 重新实现。

void QDockWidget::dockLocationChanged(Qt::DockWidgetAreaarea

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

此函数在 Qt 4.3 中引入。

bool QDockWidget::event(QEvent *event)

从QObject::event() 重新实现。

void QDockWidget::featuresChanged(QDockWidget::DockWidgetFeaturesfeatures)

当特性属性发生变化时,会发出此信号。features 参数给出该属性的新值。

void QDockWidget::initStyleOption(QStyleOptionDockWidget *option) const

使用此QDockWidget中的Initialize option。此方法对于子类在需要QStyleOptionDockWidget但不想自行填写所有信息时很有用。

bool QDockWidget::isAreaAllowed(Qt::DockWidgetArea area) const

如果此停靠小部件可以放置在给定区域,则返回true;否则返回false

void QDockWidget::paintEvent(QPaintEvent *event)

从QWidget::paintEvent() 重新实现。

void QDockWidget::setTitleBarWidget(QWidget *widget)

将任意小部件设置为停靠小部件的标题栏。如果小部件为 0,则先前在停靠小部件上设置的任何自定义标题栏小部件将被移除,但不会被删除,并且将使用默认标题栏代替。

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

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

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

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

QDockWidget *dockWidget = qobject_cast<QDockWidget*>(parentWidget());
if (dockWidget->features() & QDockWidget::DockWidgetVerticalTitleBar) {// I need to be vertical
} else {// I need to be horizontal
}

标题栏小部件必须具有有效的QWidget::sizeHint() 和QWidget::minimumSizeHint()。这些函数应考虑标题栏的当前方向。

无法从停靠部件中移除标题栏。然而,通过将默认构造的QWidget设置为标题栏部件,可以实现类似的效果。

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

此函数在 Qt 4.3 中引入。

void QDockWidget::setWidget(QWidget *widget)

将停靠部件的部件设置为 widget 。

如果在添加小部件时停靠小部件是可见的,则必须显示调用show()来显示它。

请注意,在调用此函数之前,您必须添加小部件的布局;否则,小部件将不可见。

QWidget *QDockWidget::titleBarWidget() const

返回在QDockWidget上设置的自定义标题栏小部件,否则如果未设置自定义标题栏,则返回 0 。

此函数在 Qt 4.3 中引入。

QAction *QDockWidget::toggleViewAction() const

返回一个可检查的操作,该操作可用于显示或关闭此停靠小部件。

该操作的文本被设置为停靠部件的窗口标题。

auto action=ui->dockWidget->toggleViewAction();action->setText("Dock Widget Show ?");ui->menuView->addAction(action);

 效果演示

 

void QDockWidget::topLevelChanged(bool topLevel

当浮动属性发生变化时,会发出此信号。如果停靠部件现在是浮动的,则 topLevel 参数为真;否则为假。

void QDockWidget::visibilityChanged(bool visible

当停靠部件变得可见(或不可见)时会发出此信号。这种情况发生在部件被隐藏或显示时,以及当它停靠在选项卡式停靠区域并且其选项卡被选中或未选中时。

此函数在 Qt 4.3 中引入。

QWidget *QDockWidget::widget() const

返回停靠部件的部件。如果部件尚未设置,此函数返回零。

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

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

相关文章

AI算法24-决策树C4.5算法

目录 决策树C4.5算法概述 决策树C4.5算法简介 决策树C4.5算法发展历史 决策树C4.5算法原理 信息熵&#xff08;Information Entropy&#xff09; 信息增益&#xff08;Information Gain&#xff09; 信息增益比&#xff08;Gain Ratio&#xff09; 决策树C4.5算法改进 …

Golang中读写锁的底层实现

目录 Sync.RWMutex 背景与机制 接口简单介绍 sync.RWMutex 数据结构 读锁流程 RLock RUnlock RWMutex.rUnlockSlow 写锁流程 Lock Unlock Sync.RWMutex 背景与机制 从逻辑上&#xff0c;可以把 RWMutex 理解为一把读锁加一把写锁&#xff1b; 写锁具有严格的排他性&…

【python】OpenCV—Extreme Points in the Contour

文章目录 1、需求描述2、功能实现3、更多的例子4、完整代码5、参考 1、需求描述 给一张图片&#xff0c;找出其轮廓&#xff0c;并画出轮廓的上下左右极值点 输入图片 输出效果 2、功能实现 # 导入必要的包 import imutils import cv2 # 加载图像&#xff0c;将其转换为灰度…

vue3 + antd vue 纯前端 基于xlsx 实现导入excel 转 json,将json数据转换XLSX并下载(下载模版)

一、导入 0、关键代码 // 安装插件 npm i xlsx/yarn add xlsx // 导入xlsx import * as XLSX from xlsx; 点击提交的时候才整理数据。上传的时候文件保存在 state.form.file[0] 中的 // 定义字段映射关系 const fieldMap {sheet2json: {技能名称: skill_name,技能等级: …

uni-app 影视类小程序开发从零到一 | 开源项目分享

引言 在数字娱乐时代&#xff0c;移动设备已成为我们生活中不可或缺的一部分&#xff0c;尤其是对于电影爱好者而言&#xff0c;随时随地享受精彩影片成为一种日常需求。爱影家&#xff0c;一款基于 uni-app 开发的影视类小程序&#xff0c;正是为此而生。它不仅提供了丰富的影…

【Django+Vue3 线上教育平台项目实战】购物车与订单模块的精简实现与数据安全策略

文章目录 前言一、购物车模块1.后端核心逻辑2.前端页面代码3.操作流程及演示 二、订单模块1.订单模块模型类设计1.展示订单信息a.页面展示b.前端核心代码c.后端核心逻辑 2.订单是否使用优惠券与积分a.页面展示b.前端核心代码 3.订单支付方式a.页面展示b.前端核心代码 4.提交订单…

PyTorch Autograd内部实现

原文&#xff1a; 克補 爆炸篇 25s (youtube.com) 必应视频 (bing.com)https://www.bing.com/videos/riverview/relatedvideo?&qPyTorchautograd&qpvtPyTorchautograd&mid1B8AD76943EFADD541E01B8AD76943EFADD541E0&&FORMVRDGAR 前面只要有一个node的re…

北京交通大学《深度学习》专业课,实验3卷积、空洞卷积、残差神经网络实验

一、实验要求 1. 二维卷积实验&#xff08;平台课与专业课要求相同&#xff09; ⚫ 手写二维卷积的实现&#xff0c;并在至少一个数据集上进行实验&#xff0c;从训练时间、预测精 度、Loss变化等角度分析实验结果&#xff08;最好使用图表展示&#xff09; ⚫ 使用torch.nn…

Matlab基础语法篇(下)

Matlab基础语法&#xff08;下&#xff09; 一、逻辑基础&#xff08;一&#xff09;逻辑运算符&#xff08;二&#xff09;all、any、find函数&#xff08;三&#xff09;练习 二、结构基础&#xff08;一&#xff09;条件结构&#xff08;1&#xff09;if-elseif-else-end&am…

十、操作符详解

目录 1、操作符分类 2、二进制转换 2.1二进制转十进制 2.1.1、十进制转二进制 2.2、二进制转八进制和十六进制 2.2.1、二进制转八进制 2.2.2、二进制转十六进制 3、原码、反码、补码 4、移位操作符&#xff08;移动的是二进制位&#xff09; 4.1、左移操作符 4.2、右…

VMware虚拟机下安装Ubuntu(详细教程,最小系统的安装,含VMware Tools)

1.VM的下载安装 VMware的下载安装教程_vm16 pro下载-CSDN博客 2. Ubuntu 下载 在官网或者镜像站下载所需版本的.ios镜像&#xff0c;这个镜像在接下来的步骤中会用到&#xff1a; Ubuntu 22.04.4 LTS 下载 和 清华大学开源软件镜像站 - Ubuntu 22.04.4 下载 3. 创建虚拟机 […

【C语言】深入解析希尔排序

文章目录 什么是希尔排序&#xff1f;希尔排序的基本实现代码解释希尔排序的优化希尔排序的性能分析希尔排序的实际应用结论 在C语言编程中&#xff0c;希尔排序是一种高效的排序算法&#xff0c;是插入排序的一种更高效的改进版本。它通过比较相距一定间隔的元素来进行排序&am…

【STM32嵌入式系统设计与开发---拓展】——1_10矩阵按键

这里写目录标题 1、矩阵按键2、代码片段分析 1、矩阵按键 通过将4x4矩阵按键的每一行依次设为低电平&#xff0c;同时保持其它行为高电平&#xff0c;然后读取所有列的电平状态&#xff0c;可以检测到哪个按键被按下。如果某列变为低电平&#xff0c;说明对应行和列的按键被按下…

【Java】详解抽象类和接口的区别

一、抽象类和接口的主要区别表格 特性抽象类接口声明关键字abstractinterface声明访问修饰符public、protected、default&#xff08;不能用private&#xff09;public、default继承关键字extendsimplements变量跟普通类一样&#xff0c;可以包含实例变量、静态变量等 只能包含…

excel表怎么增乱序单词表 和正序单词表四六级要来了?!Excel帮你构建自己的单词库

excel表怎么增乱序单词表 和正序单词表四六级要来了&#xff1f;&#xff01;Excel帮你构建自己的单词库 1.背单词的第一步&#xff0c;当然是先上网找电子版的单词集。 盘搜搜 2. 建立 xls 格式的表格 3. 把下载的单词数据 复制到 表格 粘贴 4.新建一列 辅助列 生成随机数来…

网络编程-TCP/IP

网络概述 网络采用分而治之的方法设计&#xff0c;将网络的功能划分为不同的模块&#xff0c;以分层的形式有机组合在一起。 每层实现不同的功能&#xff0c;其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务&#xff0c;同时使用下层提供的服务 网络体系结构…

SpringMVC注解全解析:构建高效Web应用的终极指南 (上)

SpringMVC 是一个强大的 Web 框架&#xff0c;广泛应用于 Java Web 开发中。它通过注解简化了配置&#xff0c;增强了代码的可读性。本文将全面解析 SpringMVC 中常用的注解及其用法&#xff0c;帮助你构建高效的 Web 应用。 一. MVC介绍 MVC 是 Model View Controller 的缩写…

数字通云平台 智慧政务OA PayslipUser SQL注入漏洞复现

0x01 产品简介 数字通云平台智慧政务OA产品是基于云计算、大数据、人工智能等先进技术,为政府部门量身定制的智能化办公系统。该系统旨在提高政府部门的办公效率、协同能力和信息资源共享水平,推动电子政务向更高层次发展。 0x02 漏洞概述 数字通云平台 智慧政务OA Paysli…

使用百度语音技术实现文字转语音

使用百度语音技术实现文字转语音 SpringBootVue前后端分离项目 调用api接口需要使用AK和SK生成AccessToken,生成getAccessToken的接口有跨域限制,所以统一的由后端处理了 部分参数在控制台->语音技术->在线调试里面能找到 Controller RestController RequestMapping(&q…

PostgreSQL的引号、数据类型转换和数据类型

一、单引号和双引号&#xff08;重要&#xff09;&#xff1a; 1、在mysql没啥区别 2、在pgsql中&#xff0c;实际字符串用单引号&#xff0c;双引号相当于mysql的,用来包含关键字&#xff1b; -- 单引号&#xff0c;表示user_name的字符串实际值 insert into t_user(user_nam…