Qt QStackedWidget调整问题大小

Dav*_*wig 8 qt qwidget qstackedwidget

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

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

Jas*_*lam 8

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

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

  QSize minimumSizeHint() const override
  {
    return currentWidget()->minimumSizeHint();
  }
};
Run Code Online (Sandbox Code Playgroud)


UmN*_*obe 6

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

你有两个选择:

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

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