我有一个简单的 QStackedWidget,里面有 3 个不同的 QWidget。 QWidget 的最小尺寸为 (350x200)、(200x100) 和 (450x450)。
所以我遇到的问题是,当我调整 QStackedWidget 的大小时,它的最小大小是其中最大的 QWidget 的大小。因此,如果我切换到第二个 QWidget(即大小为 (200x100) 的 QWidget),则 QStackedWidget 只会缩小 (450x450),因为它内部有最大的 QWidget。我希望它缩小尺寸以适合当前显示的 QWidget,并删除该最小尺寸。
最直接的解决方案是子类化 QStackedWidget 并重写 sizeHint 和minimumSizeHint 以返回当前小部件的提示而不是所有小部件的最大值。例如:
class StackedWidget : public QStackedWidget
{
QSize sizeHint() const override
{
return currentWidget()->sizeHint();
}
QSize minimumSizeHint() const override
{
return currentWidget()->minimumSizeHint();
}
};
好问题。不幸的是,Qt 不提供自动机制来根据子窗口小部件缩小尺寸(我所说的自动是指您不必执行任何操作)。大部分重点是扩张(参见规模政策)
您有两个选择:
在创建这些小部件的类中使用信号和槽机制。您需要监听信号
void QStackedWidget ::currentChanged ( int index )
并将 stackedwidget 的大小调整为 index
处的小部件的大小。编码速度相当快。sizeHint()
和 minimumSizeHint()
都应该返回当前小部件的大小。 Addwidget(QWidget*)
也需要修改。如果您到处使用堆叠小部件,这很有用。另一种解决方案是根本不使用堆叠小部件,而是为每个页面制作一个小部件,然后使用 setVisible(bool) 来显示和隐藏页面。这样您就可以实现调整大小行为,而无需制作自定义小部件。
第一步:重载方法:
void resizeEvent(QResizeEvent*)
第 2 步:调用“调整大小”和“选择页面”:
QRect rect;
rect.setBottomRight(stackedWidget->geometry().bottomRight());
currentWidget->setGeometry(rect);