是否可以强制 window 匹配小部件的大小?

Is it possible to force a window to match the size of the widget?

TLDR:

我通过在初始小部件上调用 .hide() 并在要切换到的小部件上调用 .show() 来在我的程序的选项卡之间切换,但是这样做只会使它成为初始小部件,并且 [=其他的 33=],正好适合我的 window。
有什么办法可以确保 window 始终符合当前显示的小部件需要的 space 多少?

明确地说,我实际上在包含我正在切换的小部件的 QFrame 上调用了 show()/hide()。框架外唯一的东西是后退按钮。

详情:

按下我的小部件中的按钮会导致在该小部件上调用 .hide() 并在子小部件上调用 .show();这是我的程序在 windows/tabs 之间切换的基本机制(主视图有多个按钮,每个按钮对应一个新的 window,每个 window 都有一个后退按钮返回主视图)

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

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

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

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

您说您需要 "back" 功能。这对于使用上述信号并自己保留导航堆栈来实现也应该是微不足道的。

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

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