首页 > 解决方案 > 是否可以强制窗口匹配小部件的大小?

问题描述

TLDR:

我通过在初始小部件上调用 .hide() 并在要切换到的小部件上调用 .show() 在程序的选项卡之间切换,但是这样做只会使初始小部件适合,而其他小部件都不适合正确地在我的窗口内。
有没有办法确保窗口始终符合当前显示的小部件所需的空间?

为了清楚起见,我实际上在 QFrame 上调用了 show()/hide(),其中包含我正在切换的小部件。框架外唯一的东西是后退按钮。

细节:

在我的小部件中按下按钮会导致在该小部件上调用 .hide() 并在子小部件上调用 .show();这是我的程序在窗口/选项卡之间切换的机制(主视图有多个按钮,每个按钮对应一个新窗口,每个窗口都有一个返回按钮来返回主视图)

在最初显示时,我的窗口看起来不错:主视图中的所有元素都显示得很好并且完美地适合窗口。但是当我切换到不同的小部件时会出现问题(同样,我通过在当前小部件上调用 .hide() 并在要切换到的小部件上调用 .show() 来做到这一点)。即使切换到的小部件通常比主视图更大或更小,窗口仍保持相同大小。

从技术上讲,我调用的是 QFrames show()/hide()。每个 QFrame 中唯一的东西是一个相应的小部件。这样我就可以拥有一个独立于我所在的小部件的后退按钮,因此并非我添加的每个小部件都需要使其成为自己的后退按钮。

布局似乎在这里没有帮助,我猜是因为它们更多地用于管理父小部件的子小部件,而不是管理窗口内的顶级小部件。如果我可以以某种方式调整窗口大小,那么我可以获取当前小部件的尺寸并将窗口大小调整为完全一样,但我不知道是否存在调整窗口大小的函数。

标签: c++qtwidgetwindow

解决方案


我不知道窗口大小会自动适应其在 Qt 中的内容的机制。您可以使用QStackedWidget它的“QStackWidget::currentChanged()”信号,因此您可以根据显示的小部件调整窗口大小。

您说您需要“返回”功能。使用上述信号并自己保留导航堆栈也应该很容易实现。

注意:这种自行调整窗口大小通常不是用户希望在 PC 上发生的事情,他们可能已经按照自己喜欢的方式手动排列窗口。

注意 2:您可以使用 Qt 事件过滤器机制实现类似的功能,并对过滤器中的隐藏和显示事件做出反应,并相应地调整窗口大小,但这是一种......非常hacky的方法。


推荐阅读