c++ - 是否可以强制窗口匹配小部件的大小?
问题描述
TLDR:
我通过在初始小部件上调用 .hide() 并在要切换到的小部件上调用 .show() 在程序的选项卡之间切换,但是这样做只会使初始小部件适合,而其他小部件都不适合正确地在我的窗口内。
有没有办法确保窗口始终符合当前显示的小部件所需的空间?
为了清楚起见,我实际上在 QFrame 上调用了 show()/hide(),其中包含我正在切换的小部件。框架外唯一的东西是后退按钮。
细节:
在我的小部件中按下按钮会导致在该小部件上调用 .hide() 并在子小部件上调用 .show();这是我的程序在窗口/选项卡之间切换的机制(主视图有多个按钮,每个按钮对应一个新窗口,每个窗口都有一个返回按钮来返回主视图)
在最初显示时,我的窗口看起来不错:主视图中的所有元素都显示得很好并且完美地适合窗口。但是当我切换到不同的小部件时会出现问题(同样,我通过在当前小部件上调用 .hide() 并在要切换到的小部件上调用 .show() 来做到这一点)。即使切换到的小部件通常比主视图更大或更小,窗口仍保持相同大小。
从技术上讲,我调用的是 QFrames show()/hide()。每个 QFrame 中唯一的东西是一个相应的小部件。这样我就可以拥有一个独立于我所在的小部件的后退按钮,因此并非我添加的每个小部件都需要使其成为自己的后退按钮。
布局似乎在这里没有帮助,我猜是因为它们更多地用于管理父小部件的子小部件,而不是管理窗口内的顶级小部件。如果我可以以某种方式调整窗口大小,那么我可以获取当前小部件的尺寸并将窗口大小调整为完全一样,但我不知道是否存在调整窗口大小的函数。
解决方案
我不知道窗口大小会自动适应其在 Qt 中的内容的机制。您可以使用QStackedWidget
它的“QStackWidget::currentChanged()”信号,因此您可以根据显示的小部件调整窗口大小。
您说您需要“返回”功能。使用上述信号并自己保留导航堆栈也应该很容易实现。
注意:这种自行调整窗口大小通常不是用户希望在 PC 上发生的事情,他们可能已经按照自己喜欢的方式手动排列窗口。
注意 2:您可以使用 Qt 事件过滤器机制实现类似的功能,并对过滤器中的隐藏和显示事件做出反应,并相应地调整窗口大小,但这是一种......非常hacky的方法。
推荐阅读
- javascript - 如何使用 jquery 在加载页面上的每个 div 下方显示颜色?
- r - 合并数据帧,以便将一个数据帧中的值插入到另一个数据帧的匹配行号中
- vtk - 如何消除 ITK 快照中标签之间的重叠?
- mysql - 加入加倍结果的问题
- google-chrome-devtools - 浏览器的 devtools 控制台中的 DOM 命令文档
- mongodb - Mongoexport 使用运算符 $in 语句
- django - 在 Django admin 的必填字段中添加星号
- amazon-web-services - 如何在s3中附加来自不同文件夹的多个csv文件
- kubernetes - 在一台虚拟机上使用混合容器的 Kubernetes?
- angular - 可能由于角度 5 中的解析而无法进行路线导航?