Dav*_*wig 8 qt qwidget qstackedwidget
我有一个简单的QStackedWidget,里面有3个不同的QWidgets.QWidgets的最小尺寸为(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();
}
};
Run Code Online (Sandbox Code Playgroud)
好问题。不幸的是,Qt 没有提供根据子小部件缩小尺寸的自动机制(自动我的意思是你不必做任何事情)。大部分重点是扩大(见规模政策)
你有两个选择:
在创建这些小部件的类中使用信号和插槽机制。您将需要收听信号void QStackedWidget ::currentChanged ( int index )并将stackedwidget 的大小调整为小部件的大小index。这对编码来说非常快。
装饰 QStackedWidget 并定义大小属性。基本上都sizeHint()和minimumSizeHint()应该返回当前控件的大小。Addwidget(QWidget*)也需要修改。如果您在任何地方都使用堆叠的小部件,则很有用。