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

相关文章

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情