10

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

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

4

4 回答 4

8

我认为最直接的解决方案是继承 QStackedWidget 并覆盖 sizeHint 和 minimumSizeHint 以返回当前小部件的提示,而不是所有小部件的最大值。例如:

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

  QSize minimumSizeHint() const override
  {
    return currentWidget()->minimumSizeHint();
  }
};
于 2015-12-15T22:22:57.733 回答
6

好问题。不幸的是,Qt 没有提供根据子小部件缩小尺寸的自动机制(自动我的意思是你不必做任何事情)。大部分重点是扩大(见规模政策

你有两个选择:

  1. 在创建这些小部件的类中使用信号和槽机制。您将需要收听信号void QStackedWidget ::currentChanged ( int index )并将stackedwidget 的大小调整为小部件的大小index。这是相当快的编码。

  2. 装饰 QStackedWidget 并定义尺寸属性。基本上两者都sizeHint()应该minimumSizeHint()返回当前小部件的大小。Addwidget(QWidget*)也需要修改。如果您在任何地方都使用堆叠的小部件,这很有用。

于 2014-05-07T08:12:17.110 回答
0

第1步:重载方法:

void resizeEvent(QResizeEvent*)

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

QRect rect;
rect.setBottomRight(stackedWidget->geometry().bottomRight());
currentWidget->setGeometry(rect);
于 2014-06-24T13:44:59.567 回答
0

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

于 2021-10-12T13:51:39.597 回答