Qt QStackedWidget调整问题大小

时间:2014-05-07 07:28:39

标签: qt qwidget qstackedwidget

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

好问题。不幸的是,Qt并没有根据子小部件提供自动调整大小的机制(通过自动我的意思是你不需要做任何事情)。大多数重点是扩展(see the size policies

您有两种选择:

  1. 使用创建这些小部件的类中的信号和插槽机制。您需要收听信号void QStackedWidget ::currentChanged ( int index )并将堆叠小部件的大小调整为index小部件的大小。这对代码来说非常快。

  2. Decorate QStackedWidget and define the size properties。基本上,sizeHint()minimumSizeHint()都应返回当前窗口小部件的大小。 Addwidget(QWidget*)也需要修改。如果您在任何地方都使用堆叠小部件,则非常有用。

答案 2 :(得分:0)

第1步:重载方法:

void resizeEvent(QResizeEvent*)

第2步:调用'resize'和'select page':

QRect rect;
rect.setBottomRight(stackedWidget->geometry().bottomRight());
currentWidget->setGeometry(rect);