Qt QStackedWidget 调整大小问题

问题描述 投票:0回答:4

我有一个简单的 QStackedWidget,里面有 3 个不同的 QWidget。 QWidget 的最小尺寸为 (350x200)、(200x100) 和 (450x450)。

所以我遇到的问题是,当我调整 QStackedWidget 的大小时,它的最小大小是其中最大的 QWidget 的大小。因此,如果我切换到第二个 QWidget(即大小为 (200x100) 的 QWidget),则 QStackedWidget 只会缩小 (450x450),因为它内部有最大的 QWidget。我希望它缩小尺寸以适合当前显示的 QWidget,并删除该最小尺寸。

qt qwidget qstackedwidget
4个回答
9
投票

最直接的解决方案是子类化 QStackedWidget 并重写 sizeHint 和minimumSizeHint 以返回当前小部件的提示而不是所有小部件的最大值。例如:

class StackedWidget : public QStackedWidget
{
  QSize sizeHint() const override
  {
    return currentWidget()->sizeHint();
  }

  QSize minimumSizeHint() const override
  {
    return currentWidget()->minimumSizeHint();
  }
};

6
投票

好问题。不幸的是,Qt 不提供自动机制来根据子窗口小部件缩小尺寸(我所说的自动是指您不必执行任何操作)。大部分重点是扩张(参见规模政策

您有两个选择:

  1. 在创建这些小部件的类中使用信号和槽机制。您需要监听信号

    void QStackedWidget ::currentChanged ( int index )
    并将 stackedwidget 的大小调整为
    index
    处的小部件的大小。编码速度相当快。

  2. 装饰QStackedWidget并定义大小属性。基本上

    sizeHint()
    minimumSizeHint()
    都应该返回当前小部件的大小。
    Addwidget(QWidget*)
    也需要修改。如果您到处使用堆叠小部件,这很有用。


1
投票

另一种解决方案是根本不使用堆叠小部件,而是为每个页面制作一个小部件,然后使用 setVisible(bool) 来显示和隐藏页面。这样您就可以实现调整大小行为,而无需制作自定义小部件。


0
投票

第一步:重载方法:

void resizeEvent(QResizeEvent*)

第 2 步:调用“调整大小”和“选择页面”:

QRect rect;
rect.setBottomRight(stackedWidget->geometry().bottomRight());
currentWidget->setGeometry(rect);
© www.soinside.com 2019 - 2024. All rights reserved.