QStackedWidget实现自适应紧凑布局

前言

本文提出了一种使QStackedWidget尺寸根据内容自适应调整的解决方法。

问题提出

我们知道,QStackedWidget可以包含多个可切换的子窗口。多个子窗口的高度不一样时,此时将QStackedWidget放在一个垂直布局中,所有子窗口会保持和最高的子窗口相同的高度,从而导致高度原本较少的子窗口出现空白区域,看起来十分不紧凑。如何让QStackedWidget尺寸根据子窗口内容自动调整呢?

原因分析

原因显而易见,QStackedWidget虽然显示当前子窗口,但是当前子窗口的高度会受到其他子窗口的影响。
下面尝试解决此问题。

1. 添加垂直弹簧VerticalSpacer

要想自适应,当然需要加弹簧,加了弹簧后,切换子窗口,所有子窗口还是保持相同的高度,说明还是需要进一步修改。

2. 隐藏非当前子窗口及其的内容(无效方法)

切换到当前子窗口时时,把其他子窗口隐藏。经测试这种方法是无效的。因为从QStackedWidget源码中可以看到,在切换当前子窗口时,其他子窗口已经被隐藏了,我们再隐藏是徒劳的。

3. 添加布局(有效方法)

解决方法是在每个子窗口里加一个垂直布局,将原本的子窗口内容作为一个content_widget放到新加的布局里。在显示当前页面时,隐藏其他页面的content_widget即可。

void showStackedWidgetPage(QStackedWidget *stackedWidget, int idx)
{stackedWidget->setCurrentIndex(idx);// 经测试,隐藏page是不行的,需要隐藏page里面的content_widgetint page_count = stackedWidget->count();for (int i = 0; i < page_count; i++){QWidget *page = stackedWidget->widget(i);QObjectList objects = page->children();for (int j = 0; j < objects.size(); j++){QWidget *content_widget = qobject_cast<QWidget *>(objects.at(j));if (content_widget){content_widget->setVisible(i == idx);break; // 这里只是跳出当前页的for循环}}}
}

同理,对于水平不紧凑的问题,就采用添加水平布局来解决。

总结

根据以上内容,猜测可能的原因如下:

因为QStackedWidget里面是使用QStackedLayout实现的,可能是由于QStackedWidget里面的QStackedLayout,和普通的QVBoxLayout、QHBoxLayout在内部元素隐藏时,处理方式不一致导致的。即QStackedLayout中子窗口隐藏,不会留出可被VerticalSpacer压缩的空间,但QVBoxLayout和QHBoxLayout在内部元素隐藏时,会将释放的空间作为可压缩空间被VerticalSapce压缩,从而实现了紧凑的自适应布局。


如果您觉得文章有用,可以关注一下笔者公众号。
在这里插入图片描述

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

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

相关文章

linux查看tcl版本_查看Linux内核版本的方法有几个?你也是这样操作吗?

请关注本头条号&#xff0c;每天坚持更新原创干货技术文章。如需学习视频&#xff0c;请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言内核是操作系统的核心组件。 它管理系统的资源&#xff0c;是计算机硬件和软件之间的桥梁。您可能因多种原因需要确切知道GNU / …

【转】4.2使用jQuery.form插件,实现完美的表单异步提交

传送门&#xff1a;异步编程系列目录…… 示例下载&#xff1a;使用jQuery.form插件&#xff0c;实现完美的表单异步提交.rar 抓住6月份的尾巴&#xff0c;今天的主题是 今天我想介绍的是一款jQuery的插件&#xff1a;Jquery.form.js 官网。 通过该插件&#xff0c;我们可以非常…

什么方式可以通过影子系统传播恶意代码_将恶意代码隐藏在图像中:揭秘恶意软件使用的隐写术...

概述本周&#xff0c;许多Facebook用户都会发现&#xff0c;一些用户发布图片上出现了原本应该隐藏的图像标签。由此可以证明&#xff0c;图像可以携带大量表面上不可见的数据。实际上&#xff0c;Facebook和Instagram所使用的图片元数据与恶意攻击者制作的特制图像相比显得非常…

无法嵌入互操作类型 请改用适用的接口_西门子COMOS软件开发定制学习7-嵌入谷歌浏览器内核...

首先需要声明的是&#xff0c;本篇并非COMOS实用案例&#xff0c;只是希望借此让大家了解&#xff0c;如何使用微软的WPF和C#语言开发COMOS插件。首先看下效果图功能说明&#xff1a;拖拽COMOS设备至定制的浏览器&#xff0c;自动根据设备的名称和其制造商参数值&#xff0c;搜…

【转】C#与C++的发展历程第一 - 由C#3.0起

C#5.0作为第五个C#的重要版本&#xff0c;将异步编程的易用度推向一个新的高峰。通过新增的async和await关键字&#xff0c;几乎可以使用同编写同步代码一样的方式来编写异步代码。 本文将重点介绍下新版C#的异步特性以及部分其他方面的改进。同时也将介绍WinRT程序一些异步编…

【转】5.2高性能IO模型浅析

服务器端编程经常需要构造高性能的IO模型&#xff0c;常见的IO模型有四种&#xff1a; &#xff08;1&#xff09;同步阻塞IO&#xff08;Blocking IO&#xff09;&#xff1a;即传统的IO模型。 &#xff08;2&#xff09;同步非阻塞IO&#xff08;Non-blocking IO&#xff0…

vba 修改文本文档 指定行_VBA程序报错,用调试三法宝,bug不存在的

如果把VBA比作一门刀法&#xff0c;那么经过前面内容的操练&#xff0c;大家已经掌握了很多实用的招式。如果我们在刀法招式的基础之上&#xff0c;再掌握更多的“磨刀”心法&#xff0c;那么我们的刀用起来才会又好又快。所以今天主要和大家分享——VBA“磨刀”心法之程序调试…

mqtt协议详解_IoT物联网设备上云技术方案详解

随着传感器和通信技术的不断发展&#xff0c;物联网行业方兴未艾&#xff0c;业务链路涉及数据采集&#xff0c;通信连接&#xff0c;数据存储&#xff0c;数据可视化&#xff0c;洞察&#xff0c;行动决策。但&#xff0c;在实施过程中&#xff0c;碎片化的设备端通信连接难题…

【转】基于WebSocketSharp 的IM 简单实现

websocket-sharp 是一个websocket的C#实现&#xff0c;支持.net 3.5及以上来开发服务端或者客户端。本文主要介绍用websocket-sharp来做服务端、JavaScript做客户端来实现一个简单的IM。 WebSocketBehavior WebSocketBehavior是核心对象&#xff0c;他包含了OnOpen,OnMessage…

【转】极限编程一览

极限编程&#xff08;XP&#xff09;起源始于1990年代。当时肯特布莱克&#xff08;Kent Black&#xff09;在戴姆勒克莱斯勒&#xff08;DaimlerChrysler&#xff09;处理项目时&#xff0c;试图寻找一种更好的软件开发方法。他的创立新方法后来被称为极限编程方法论&#xff…

mysql 关联更新_跳出初学MySQL知识的原理整理(一)

一、基础架构MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;所有跨存储引擎的功能都在这一层实现&#xff0c;比如存储过程、触发器、视图等。而存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM等多…

【转】TcpListener和tcpclient使用

前段时间公司项目中遇着需要做文件的远程传输&#xff0c;场景是用户通过网页选择一些文件&#xff0c;然后提交请求到服务器&#xff0c;同时把请求标识传递给本机的TCP文件传输端&#xff1b;服务器收到请求后在服务器端创建任务生成保存文件的路径同时通知文件传输端开始传文…

sleep期间读取所有_ceph部分数据所有副本先后故障的抢救

半天河网易游戏高级运维工程师&#xff0c;主要负责云存储的运维&#xff1b;一个既希望跟业务聊又喜欢能够默默在后面忙活的普通运维人。背景故障现场故障恢复故障恢复分析第一种方式&#xff1a;物理磁盘对拷第二种方式&#xff1a;服务启动时跳过故障扇区来避免异常退出解决…

【转】有限状态机用法教程

如博文无法正常显示&#xff0c;请访问原文地址&#xff1a; https://blog.csdn.net/ChinarCSDN/article/details/82263126 有限状态机用法教程 文章目录 有限状态机用法教程 [toc]1Finite-state machine —— 有限状态机2Foreword —— 前言()3Example —— 示例4Moltimode —…

通用usb集线器驱动_多口充电、高速传输——ORICO晶锐系列7口集线器测评

随着笔电越来越薄&#xff0c;机身接口数量越来越少&#xff0c;U盘、存储卡、移动硬盘、鼠标、蓝牙适配器等明显感觉无处可插&#xff0c;因此USB集线器就成为笔电的最佳拍档。近期&#xff0c;ORICO(奥睿科)推出了一款晶锐系列7口集线器产品&#xff0c;它集成了7个USB3.0接口…

【转】状态机思路在程序设计中的应用

状态机思路在单片机程序设计中的应用 状态机的概念 状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中&#xff0c;必然有状态机的身影浮现。 比如说一个按键命令解析程序&#xff0c;就可以被看做状态机&#xff1a;本…

【转】超详细的UML状态图符号,初学者也能轻松看懂状态图

UML状态图&#xff0c;用于显示状态机&#xff0c;即描述一个对象所处的可能状态以及状态之间的转移。用状态图建模可以帮助开发人员分析复杂对象的各种状态的转换&#xff0c;以及对象何时执行怎样的动作。那状态图又是怎样表示这些信息的呢&#xff1f;要想看明白其中的奥妙&…

舒尔特注意力训练表格_舒尔特注意力训练,舒尔特方格练习入口

孩子的注意力是否集中&#xff0c;直接影响孩子的上课效率和作业正确率&#xff0c;最终影响学习成绩。道理大家都懂&#xff0c;关键是如何保证注意力的集中。接下来&#xff0c;我给大家推荐一个简单方便在家就能完成的训练方法&#xff0c;把它比作小游戏也不为过。那就是舒…

nginx文件系统大小_Nginx 了解一下?

这篇文章主要简单的介绍下 Nginx 的相关知识&#xff0c;主要包括以下几部分内容&#xff1a;Nginx 适用于哪些场景&#xff1f;为什么会出现 Nginx&#xff1f;Nginx 优点Nginx 的编译与配置Nginx 适用于哪些场景&#xff1f;如图所示&#xff0c;一个请求会先经过 Nginx 到达…

存储过程排版工具_安利一款比Evernote更为实用的云笔记工具,不容错过

作为一个爱分享的自媒体人&#xff0c;出于工作和兴趣前前后后接触到的云笔记工具很多&#xff0c;例如&#xff1a;有道云笔记、为知笔记、语雀、印象笔记、oneNote...在笔记工具的使用上还是略有点点心得&#xff0c;今天给大家分享一款实用的云笔记工具——Baklib&#xff0…