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;我们可以非常…

python医学数据挖掘_GitHub - SSSzhangSSS/Python-Data-mining-Tutorial: Python数据挖掘教程

Python数据挖掘教程作者 : 长行说明 : 本教程以9周的数据挖掘教程为主&#xff0c;每周包括5天的知识学习和2天的案例实现。以周为阶段&#xff0c;每周包括5天的知识内容(Day)、1天的案例实现(Example)和1天的小测验(Test)&#xff1b;此外还可能包含选学部分(Extra)。案例的难…

面向对象软件开发代码结构(2)

使用封装降低信息的复杂度 封装是面向对象编程的核心思想之一。 封装的过程&#xff0c;是将大量的信息&#xff08;过程、数据&#xff09;&#xff0c;凝缩成满足特定需求的接口的过程。 从数量上来说&#xff0c;好的封装必然是将大量的、与业务交互无关的实现细节隐藏起来…

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

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

一种类的渐进式开发写法

// 主类&#xff0c;一般为窗口类 class MainClass { public:FuncClass1 *a;FuncClass2 *b; }// 实现某个功能的类 class FuncClass1 { public:FuncClass1(MainClass *) }// 实现某个功能的类 class FuncClass2 { public:FuncClass2(MainClass *) }每加一个大的功能&#xff0c…

【转】SQL中where, group by, having的用法和区别

group by,where,having 是数据库查询中最常用的几个关键字。在工作中&#xff0c;时常用到&#xff0c;那么&#xff0c;当一个查询中使用了where ,group by ,having及聚集函数时 &#xff0c;执行顺序是怎么样的&#xff1f;为了回答这个问题&#xff0c;将这个三个关键字的用…

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

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

Win10上VMware的问题汇总

装xp很卡顿的问题 卸载360&#xff0c;重启电脑即可。 拖拽文件/文件夹到虚拟机直接卡住 使用15.1版本的VMware即可。 资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1dtr_cPwzprRTznpxj-OKTw 提取码&#xff1a;1wpj

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

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

python数据库实例_Python操作MySQL数据库9个实用实例

用python连接mysql的时候&#xff0c;需要用的安装版本&#xff0c;源码版本容易有错误提示。下边是打包了32与64版本。MySQL-python-1.2.3.win32-py2.7.exeMySQL-python-1.2.3.win-amd64-py2.7.exe实例 1、取得 MYSQL 的版本实例 2、创建一个表并且插入数据实例 3、 python 使…

Win10+VMware上安装macOS过程记录

2021年更新 主要参考文章&#xff1a;https://blog.csdn.net/qq_40143985/article/details/104011778 参考了其他一些文章&#xff0c;最后会出现…not successfully错误&#xff0c;安装失败。建议参考这篇文章。 FAQ 安装好macOS后&#xff0c;电脑运行有点卡的问题&#x…

【转】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“磨刀”心法之程序调试…

VMware使用

重要功能 快照 快照就是保存当前虚拟机完整状态&#xff0c;相当于手动克隆一个虚拟机副本&#xff0c;也相当于是git中的一个提交点。在安装好一个新的虚拟机之后&#xff0c;一般都要创建一个快照&#xff0c;便于日后恢复。

【转】VS TFS源码分析软件PATFS使用方法一:配置团队项目

# 项目交付用正版&#xff0c;省下一台Iphone12 # # 31款JAVA开发必备控件和工具 # 相关链接&#xff1a; VS TFS源码分析软件PATFS使用方法二&#xff1a;设置新数据检查间隔VS TFS源码分析软件PATFS使用方法三&#xff1a;数据附件大小限制的自定义设置VS TFS源码分析软件P…

python selenium api_Selenium2+python自动化-查看selenium API

前面都是点点滴滴的介绍selenium的一些api使用方法&#xff0c;那么selenium的api到底有多少呢&#xff1f;本篇就叫大家如何去查看selenium api&#xff0c;不求人&#xff0c;无需伸手找人要&#xff0c;在自己电脑就有。pydoc是Python自带的模块&#xff0c;主要用于从pytho…

软件开发

1、先后台后前台&#xff0c;先功能后界面。 2、结构化&#xff0c;是指分层、分模块软件设计&#xff0c;简化复杂的软件系统。非结构化的&#xff0c;例如使用GOTO语句&#xff0c;会导致模块间高度耦合。

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…