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 调整为打开的页面[重复]

如何制作不同大小的 QStackedWidget 的不同页面?

如何将 QStackedWidget 大小设置为子小部件的最小尺寸?

QT中怎么调整显示图片大小

Qt - QStackedWidget 使用

在 qt 中显示 QStackedWidget 项目的延迟[关闭]