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

时间:2019-07-04 15:32:17

标签: c++ qt widget window

TLDR:

我通过在初始窗口小部件上调用.hide()并在要切换到的窗口小部件上调用.show()来在程序的选项卡之间进行切换,但是这样做仅使初始窗口小部件起作用,而其他都没有那些,正好适合我的窗户。
是否有任何方法可以确保窗口始终符合当前显示的窗口小部件需要的空间?

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

详细信息:

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

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

从技术上讲,我正在将QFrames称为show()/ hide()。每个QFrame内唯​​一的是一个相应的小部件。这样,我可以拥有一个与我所在的小部件无关的后退按钮,因此并不是我添加的每个小部件都需要使其成为自己的后退按钮。

布局在这里似乎无济于事,因为它们更适合于管理父窗口小部件的子窗口小部件,而不是在窗口中管理顶级窗口小部件。如果我可以以某种方式调整窗口大小,那么可以考虑当前窗口小部件的尺寸,然后将窗口调整为恰好那样,但是我不知道是否存在调整窗口大小的函数。

1 个答案:

答案 0 :(得分:0)

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

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

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

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