我有一个简单的QStackedWidget,里面有3个不同的QWidgets。 QWidgets的最小尺寸为(350x200),(200x100)和(450x450)。
所以我遇到的问题是当我调整QStackedWidget的大小时,它有一个最大的QWidget大小。因此,如果我切换到第二个QWidget(它是大小为(200x100)的QWidget),QStackedWidget将只缩小(450x450),因为它内部有最大的QWidget。我希望它的大小适合当前显示的QWidget,并删除最小尺寸。
答案 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)
您有两种选择:
使用创建这些小部件的类中的信号和插槽机制。您需要收听信号void QStackedWidget ::currentChanged ( int index )
并将堆叠小部件的大小调整为index
小部件的大小。这对代码来说非常快。
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);