Qt5布局管理(二)——QDockWidget停靠窗口类

2024-01-27 06:40

本文主要是介绍Qt5布局管理(二)——QDockWidget停靠窗口类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

转载:LeeHDsniper

停靠窗口类QDockWidget

实例效果

如右图所示,左半部分MainWindow是该窗口的中心窗口,右边的最下面两个停靠窗口可以跳出该窗口:

但是第一个停靠窗口只能停靠在右边或者左边,不能跳出。
同时各个窗口的大小可以调节。
另外,各个窗口可以合并:

重要代码

 1 #include "dockwindows.h"
 2 #include <QTextEdit>
 3 #include <QDockWidget>
 4 DockWindows::DockWindows(QWidget *parent)
 5     : QMainWindow(parent)
 6 {
 7     setWindowTitle(tr("DockWindows"));//设置主窗口的标题栏文字
 8     QTextEdit *te=new QTextEdit(this);//定义一个QTextEdit对象作为主窗口
 9     te->setText(tr("Main Window"));
10     te->setAlignment(Qt::AlignCenter);
11     setCentralWidget(te);             //将此编辑框作为主窗体的中央窗体
12     //停靠窗口1
13     QDockWidget *dock1=new QDockWidget(tr("DockWindow1"),this);
14     QDockWidget *dock2=new QDockWidget(tr("DockWindow2"),this);
15     QDockWidget *dock3=new QDockWidget(tr("DockWindow3"),this);
16     //可移动
17     dock1->setFeatures(QDockWidget::DockWidgetMovable);
18     dock1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
19     QTextEdit *te1=new QTextEdit();
20     te1->setText(tr("Window1,The dock widget can be moved between dicks by user" ""));
21     dock1->setWidget(te1);
22     addDockWidget(Qt::RightDockWidgetArea,dock1);
23     //停靠窗口2
24     //dock2=new QDockWidget(tr("DockWindow2"),this);
25     dock2->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);
26     QTextEdit *te2=new QTextEdit();
27     te2->setText(tr("Window2,The dock widget can be detached from the main window,"
28                    """and floated as an independent window,and can be closed" ));
29     dock2->setWidget(te2);
30     addDockWidget(Qt::RightDockWidgetArea,dock2);
31     //停靠窗口3
32     //dock3=new QDockWidget(tr("DockWindow3"),this);
33     dock3->setFeatures(QDockWidget::AllDockWidgetFeatures);
34     QTextEdit *te3=new QTextEdit();
35     te3->setText(tr("Window3,The dock widget can be closed,moved,add floated"));
36     dock3->setWidget(te3);
37     addDockWidget(Qt::RightDockWidgetArea,dock3);
38 }
39 
40 DockWindows::~DockWindows()
41 {
42 
43 }

1.line 17:dock1->setFeatures(QDockWidget::DockWidgetMovable); 这个函数设置停靠窗口是否可移动,可关闭,可悬浮。
在这个持续中,第一个停靠窗口只能移动,第二个窗口不可移动,也就是说它只能悬浮或者关闭,不能出现在第一个或者第三个停靠窗口的位置。

第三个窗口则具备了上述所有属性。下面是Qt文档的解释:

This property holds whether the dock widget is movable, closable, and floatable. 
By default, this property is set to a combination of DockWidgetClosable, DockWidgetMovable and DockWidgetFloatable.

2.QDockWidget的隐式共享
在前面讲QString时提到了隐式共享,其实隐式共享同样支持所有的容器类,QDockWidget就是其中之一。
可以看到,我定义了三个QDockWidget对象:dock1,dock2,dock3。事实上,只需要一个QDockWidget对象就足够了,只需要在每个停靠窗口初始化的时候重新初始化这个dock对象。 那么就会出现一个问题:
addDockWidget(Qt::RightDockWidgetArea,dock2);
这段代码中(出现了三次),如果只用一个dock,会不会使已定义的dock对象不见了?如果这个dock是C++中的一个引用的话,确实会导致对象被覆盖。但是Qt的隐式共享解决了这个问题,有关隐式共享的问题之前已经解释过了:http://blog.csdn.net/leehdsniper/article/details/50975227。

 

转载于:https://www.cnblogs.com/fuqia/p/8883133.html

这篇关于Qt5布局管理(二)——QDockWidget停靠窗口类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/649357

相关文章

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

Linux权限管理与ACL访问控制详解

《Linux权限管理与ACL访问控制详解》Linux权限管理涵盖基本rwx权限(通过chmod设置)、特殊权限(SUID/SGID/StickyBit)及ACL精细授权,由umask决定默认权限,需合... 目录一、基本权限概述1. 基本权限与数字对应关系二、权限管理命令(chmod)1. 字符模式语法2.

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务