Qt QStackedWidget 调整大小问题
Posted
技术标签:
【中文标题】Qt QStackedWidget 调整大小问题【英文标题】:Qt QStackedWidget Resizing Issue 【发布时间】:2014-05-07 07:28:38 【问题描述】:我有一个简单的 QStackedWidget,里面有 3 个不同的 QWidget。 QWidget 的最小尺寸为 (350x200)、(200x100) 和 (450x450)。
所以我遇到的问题是,当我调整 QStackedWidget 的大小时,它的最小尺寸是其中最大的 QWidget。因此,如果我切换到第二个 QWidget(即大小为 (200x100) 的 QWidget),QStackedWidget 只会缩小(450x450),因为它里面有最大的 QWidget。我希望它缩小以适合当前显示的 QWidget,并删除该最小尺寸。
【问题讨论】:
这个问题已经被here问过了,我发帖后看到了。链接的问题质量较低,因此我对其进行了编辑,并投票赞成将其作为重复问题关闭。 好的,谢谢兄弟。环顾四周,但没有看到这个 该问题的标题不正确。即使出现在搜索结果中,您阅读它的机会也很低。 【参考方案1】:我认为最直接的解决方案是继承 QStackedWidget 并覆盖 sizeHint 和 minimumSizeHint 以返回当前小部件的提示,而不是所有小部件的最大值。例如:
class StackedWidget : public QStackedWidget
QSize sizeHint() const override
return currentWidget()->sizeHint();
QSize minimumSizeHint() const override
return currentWidget()->minimumSizeHint();
;
【讨论】:
【参考方案2】:好问题。不幸的是,Qt 没有提供根据子小部件缩小尺寸的自动机制(自动我的意思是你不必做任何事情)。大部分重点是扩展 (see the size policies)
你有两个选择:
在创建这些小部件的类中使用信号和槽机制。您将需要收听信号void QStackedWidget ::currentChanged ( int index )
并将stackedwidget 的大小调整为index
处的小部件的大小。这编码速度非常快。
Decorate QStackedWidget and define the size properties。基本上sizeHint()
和minimumSizeHint()
都应该返回当前小部件的大小。 Addwidget(QWidget*)
也需要修改。如果您在任何地方都使用堆叠的小部件,这很有用。
【讨论】:
【参考方案3】:第一步:重载方法:
void resizeEvent(QResizeEvent*)
第 2 步:调用“调整大小”和“选择页面”:
QRect rect;
rect.setBottomRight(stackedWidget->geometry().bottomRight());
currentWidget->setGeometry(rect);
【讨论】:
这仅在 QStackedWidget 本身不在布局中时有效。如果它在布局中,则必须通过尺寸提示、最小尺寸、尺寸政策等设置其尺寸。另一个问题的答案***.com/questions/14480696/…(标记为重复)更有用。【参考方案4】:另一种解决方案是根本不使用堆叠小部件,而是为每个页面制作一个小部件,然后使用 setVisible(bool) 显示和隐藏页面。这样,您无需制作自定义小部件即可获得调整大小的行为。
【讨论】:
以上是关于Qt QStackedWidget 调整大小问题的主要内容,如果未能解决你的问题,请参考以下文章
如何制作不同大小的 QStackedWidget 的不同页面?