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压缩,从而实现了紧凑的自适应布局。
如果您觉得文章有用,可以关注一下笔者公众号。
QStackedWidget实现自适应紧凑布局相关推荐
- HarmonyOS UI开发 AdaptiveBoxLayout(自适应盒子布局) 的使用
AdaptiveBoxLayout 是什么 AdaptiveBoxLayout 是自适应盒子布局,该布局提供了在不同屏幕尺寸设备上的自适应布局能力,主要用于相同级别的多个组件需要在不同屏幕尺寸设备上自 ...
- 网页右边固定php,左侧固定,右侧自适应的布局方式
这次给大家带来左侧固定,右侧自适应的布局方式,左侧固定,右侧自适应布局方式的注意事项有哪些,下面就是实战案例,一起来看一下. 第一种方法: Document .one { position: abso ...
- html流动布局,自适应css布局——流动布局新时代
流动网页设计有很多好处,但也只有在正确使用的时候.合适的技巧会使页面在大屏幕.小屏幕抑.PDA小屏幕上都能得到良好的呈现.但是,糟糕的代码结构,对于流动布局来说将是灾难性的.因此,我们需要针对大多数流 ...
- html如何左侧固定div,详解左右宽度固定中间自适应html布局解决方案
原标题:详解左右宽度固定中间自适应html布局解决方案 本文介绍了详解左右宽度固定中间自适应html布局解决方案,分享给大家,具体如下: a.使用浮动布局 html结构如下 left right ce ...
- jQuery实现等比例缩放大图片让大图片自适应页面布局
在布局页面时,有时会遇到大图片将页面容器"撑破"的情况,尤其是加载外链图片(通常是通过采集的外站的图片).那么本文将为您讲述使用jQuery如何按比例缩放大图片,让大图片自适应页面 ...
- 转: 自适应css布局—-流动布局新时代(译文)
流动网页设计有很多好处,但也只有在正确使用的时候.合适的技巧会使页面在大屏幕.小屏幕抑.PDA小屏幕上都能得到良好的呈现.但是,糟糕的代码结构,对于流动布局来说将是灾难性的.因此,我们需要针对大多数流 ...
- 移动端h5框架自适应_Html5移动端页面自适应百分比布局
按百分比布局,精度肯定不会有rem精确 Document * { padding: 0; margin: 0; } .one { width: 20%; height: 100px; float: l ...
- dwcc怎么设置html默认,Dreamweaver CC2018写div自适应页面布局的教程
Dreamweaver CC2018怎么写div自适应页面布局?一般网页都是固定的宽度,所以不能自适应网页窗口大小.我们可以把宽度设置为百分比,这样就可以啦.只不过需要自己算好百分比的数值,接下来小编 ...
- 移动端开发注意事项、需要注意的问题、特殊属性、精灵图、座固定有自适应的布局
一.移动端开发注意事项 网址:移动端开发注意事项 二.关于meta (一).常用的公共meta属性 1.viewport <meta name="viewport"conte ...
最新文章
- 字节跳动这份面试题,你能打几分
- 桌面虚拟化(八):扔掉你的电脑!电视就够了!
- 2005年4月全国计算机等级考试二级C语言笔试试题及答案
- (CodeForces 548B 暴力) Mike and Fun
- java 7 g1_java7中G1垃圾收集器使用和流程总结
- 傲笑九天志在必得,卧薪尝胆勇者无畏.
- 【OpenCV】将RGB图像转为灰度图
- hdu 1874 Dijkstra算法模板
- centos 安装 redmine 2.1.4
- android 中Dialog对话框及自定义Dialog的方法
- 这个世界是那样的似曾相识
- 查询结果做缓存的例子
- 游戏开发之C++类中的static、const梳理总结(C++基础)
- 【cs231】损失函数与优化
- python 鼠标 自动点击_Python实现鼠标隔几秒自动点击电脑某区域
- win7自带的xps viewer很好用
- c 文件中调用 cpp 中函数
- html 京东购物车样式,购物车css样式效果
- wordpress模板_如何在15分钟内定制WordPress模板
- python 录音左右声道_Python分离立体声wav压缩文件的左右声道
热门文章
- 剑客决斗(NYOJ 110)
- 鸡啄米vc++2010系列2(项目文件分析)
- matlab二元一次方程求解_2-函数的求解计算
- 破解静态WEP KEY全过程
- windows7远程linux,用XManager在Windows7下远程桌面连接Linux
- java类与对象实验报告心得体会_第四周课程总结与实验报告(Java简单类与对象)...
- 数据插不进mysql_数据插入不进数据库里面去。
- action无法传参数给html页面,HTML 解决form表单提交时,action url中参数无效问题
- 二叉树的创建_大多数人都不会手写创建并遍历二叉树,一航这里帮你终结了
- 蓝图中实现人物移动2