QDockWidget

news2024/11/28 0:55:23

详细描述

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.coloradmin.cn/o/1938056.html

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

相关文章

多商户商城系统源码解析及直播电商APP开发指南

本篇文章&#xff0c;笔者将详细解析多商户商城系统的源码结构&#xff0c;并提供开发直播电商APP的指南。 一、多商户商城系统源码解析 系统架构设计 多商户商城系统的架构设计通常分为前端、后端和数据库三个部分&#xff1a; 前端 后端 数据库 核心模块分析 多商户商…

SpringMVC源码深度解析(上)

今天&#xff0c;聊聊SpringMVC框架的原理。SpringMVC属于Web框架&#xff0c;它不能单独存在&#xff0c;需要依赖Servlet容器&#xff0c;常用的Servlet容器有Tomcat、Jetty等&#xff0c;这里以Tomcat为例进行讲解。老规矩&#xff0c;先看看本项目的层级结构&#xff1a; 需…

ETAS RTM配置及使用-CPU Load测量/task时间测量/Isr时间测量

文章目录 前言RTM配置RtmControlRtmGeneralRtmMonitorOS配置RTE配置集成与测试初始化主函数函数执行测量测试CPU LoadTask MonitorISR Monitor函数监控总结前言 一般对CPU Load的测量,task及runnable的监控等有两种方案: 1.需要使用带trace功能的调试器,且硬件也需要支持对…

鸿蒙开发 01 实现骰子布局

鸿蒙开发 01 鸿蒙开发 01 实现骰子布局 1、效果2、代码 1、效果 2、代码 Entry Component struct Index {State message: string Hello Worldbuild() {Column() {Row() {Radio({ value: Radio1, group: radioGroup }).checked(false).height(100)Radio({ value: Radio1, grou…

【Linux线程】线程的认识

目录 线程的概念及一些基本理论 线程异常 线程与进程的关系 线程ID、线程控制块 线程的概念及一些基本理论 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列” 。 Linux没有真正意义上的线…

【每日刷题】Day83

【每日刷题】Day83 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 192. 把字符串转换成整数 (atoi) - 力扣&#xff08;LeetCode&#xff09; 2. 415. 字符串相加…

ubuntu安装显卡驱动,anaconda,cuda,cudnn,pytorch

安装显卡驱动&#xff1a;主要参考第一篇。 Ubuntu22.04安装显卡驱动(高速、避错版)-CSDN博客 [超级详细系列]ubuntu22.04配置深度学习环境(显卡驱动CUDAcuDNNPytorch)--[2]安装Anaconda与CUDA_ubuntu22.04配置cuda环境变量-CSDN博客 安装anaconda和cuda [超级详细系列]ubun…

从0开始的informer代码解读

股价预测源码原版来源 github https://github.com/zhouhaoyi/Informer2020 数据 工欲善其事必先利其器&#xff0c;这是我经常说的。所以了解我们的数据处理很重要&#xff0c;毕竟要的就是地地地地地地道。 源码中的date数据很重要。但是我们要知道我们下载的代码具有可拓…

python-NLP:1中文分词

文章目录 规则分词正向最大匹配法逆向最大匹配法双向最大匹配法 统计分词语言模型HMM模型 jieba分词分词关键词提取词性标注 规则分词 基于规则的分词是一种机械分词方法&#xff0c;主要是通过维护词典&#xff0c;在切分语句时&#xff0c;将语句的每个字符串与词表中的词进行…

pytorch学习(十二)c++调用minist训练的onnx模型

在实际使用过程中&#xff0c;使用python速度不够快&#xff0c;并且不太好嵌入到c程序中&#xff0c;因此可以把pytorch训练的模型转成onnx模型&#xff0c;然后使用opencv进行调用。 所需要用到的库有&#xff1a; opencv 1.完整的程序如下 import torch from torch impo…

06. 截断文本 选择任何链接 :root 和 html 有什么区别

截断文本 对超过一行的文本进行截断,在末尾添加省略号(…)。 使用 overflow: hidden 防止文本超出其尺寸。使用 white-space: nowrap 防止文本超过一行高度。使用 text-overflow: ellipsis 使得如果文本超出其尺寸,将以省略号结尾。为元素指定固定的 width,以确定何时显示省略…

韩顺平0基础学Java——第35天

p689-714 格式化语句 gpt说的&#xff1a; System.out.println 方法不支持像 printf 一样的格式化字符串。要使用格式化字符串&#xff0c;你可以使用 System.out.printf 方法或将格式化后的字符串传递给 System.out.println。下面是两种修正的方法&#xff1a; ### 方法一…

科研绘图系列:R语言circos图(circos plot)

介绍 Circos图是一种数据可视化工具,它以圆形布局展示数据,通常用于显示数据之间的关系和模式。这种图表特别适合于展示分层数据或网络关系。Circos图的一些关键特点包括: 圆形布局:数据被组织在一个或多个同心圆中,每个圆可以代表不同的数据维度或层次。扇区:每个圆被划…

昇思25天学习打卡营第25天|MindNLP ChatGLM-6B StreamChat

配置环节 %%capture captured_output !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 !pip install mindnlp !pip install mdtex2html配置国内镜像 !export HF_ENDPOINThttps://hf-mirror.com下载与加载模型 from m…

【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决

在safari浏览器中&#xff0c;可能会遇到异步时间差的问题&#xff0c;导致状态没有及时更新到state&#xff0c;引起传参错误。 PS&#xff1a;由于useState是一个普通的函数&#xff0c; 定义为() > void;因此此处不能用await/async替代setTimeout&#xff0c;只能用在返…

Vue3 composition api计算属性活学活用(作业题1 - 计算扁平化树树节点的索引)

本示例节选自vue3最新开源组件实战教程大纲&#xff08;持续更新中&#xff09;的tree组件开发部分。在学习了tree组件实现折叠与展开功能&#xff08;方式2 - visible计算属性&#xff09;后&#xff0c;给读者朋友留的一道编程作业题。 作业要求 合理的设计和实现树节点的计…

【C#】计算两条直线的交点坐标

问题描述 计算两条直线的交点坐标&#xff0c;可以理解为给定坐标P1、P2、P3、P4&#xff0c;形成两条线&#xff0c;返回这两条直线的交点坐标&#xff1f; 注意区分&#xff1a;这两条线是否垂直、是否平行。 代码实现 斜率解释 斜率是数学中的一个概念&#xff0c;特别是…

HTML开发笔记:1.环境、标签和属性、CSS语法

一、环境与新建 在VSCODE里&#xff0c;加载插件&#xff1a;“open in browser” 然后新建一个文件夹&#xff0c;再在VSCODE中打开该文件夹&#xff0c;在右上角图标新建文档&#xff0c;一定要是加.html&#xff0c;不要忘了文件后缀 复制任意一个代码比如&#xff1a; <…

reserve和resize

void test_vector4() {vector<int> v1;//cout << v1.max_size() << endl;//v1.reserve(10);v1.resize(10);for (size_t i 0; i < 10; i){v1[i] i;}for (auto e : v1){cout << e << " ";}cout << endl;} 在上面这段代码中对…

数学建模--国赛备赛---TOPSIS算法

目录 1.准备部分 1.1提交材料 1.2MD5码相关要求 2.TOPSIS算法 2.1算法概述 2.2基本概念 2.3算法核心思想 2.4拓展思考 3.适用赛题 3.1适用赛题说明 3.2适用赛题举例 4.赛题分析 4.1指标的分类 4.2数据预处理 4.2.1区间型属性的变换 4.2.2向量规范化 4.3数据加…