dar*_*aze 5 size qt qwidget qstackedwidget
我希望我QStackedWidget调整大小到打开的页面.
我在第一页上附加了很多小部件,但其余的页面只有一个按钮.所以他们保持这么大,第一页就可以了.
如何让我QStackedWidget的页面大小正在被查看.
我想要这样做的原因是我有三种不同的选择,之后我还有其他的东西.如果我改变到有一个按钮然后有很多空白区域的模式,我不明白它为什么不调整大小.
您可以使用此Resizable StackedWidget
在我的实践中,我记得我有使用重新定义的addWidget方法从QStackedWidget派生的类。在这种方法中,我接下来要做的是:
void ResizableStackedWidget::addWidget(QWidget* pWidget)
{
pWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
QStackedWidget::addWidget(pWidget);
}
Run Code Online (Sandbox Code Playgroud)
并通过以下插槽连接到currentChange(QWidget *)信号:
void ResizableStackedWidget::onCurrentChanged(int index)
{
QWidget* pWidget = widget(index);
Q_ASSERT(pWidget);
pWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pWidget->adjustSize();
adjustSize();
}
Run Code Online (Sandbox Code Playgroud)
// make the stacked widget size to the current page only
for (int i = 0; i < m_ui->stackedWidget->count (); ++i)
{
// determine the vertical size policy
QSizePolicy::Policy policy = QSizePolicy::Ignored;
if (i == m_ui->stackedWidget->currentIndex ())
policy = QSizePolicy::Expanding;
// update the size policy
QWidget* pPage = m_ui->stackedWidget->widget (i);
pPage->setSizePolicy (policy, policy);
}
Run Code Online (Sandbox Code Playgroud)