将QStackedWidget的大小调整为打开的页面

dar*_*aze 5 size qt qwidget qstackedwidget

我希望我QStackedWidget调整大小到打开的页面.

我在第一页上附加了很多小部件,但其余的页面只有一个按钮.所以他们保持这么大,第一页就可以了.

如何让我QStackedWidget的页面大小正在被查看.

我想要这样做的原因是我有三种不同的选择,之后我还有其他的东西.如果我改变到有一个按钮然后有很多空白区域的模式,我不明白它为什么不调整大小.

syn*_*ker 5

您可以使用此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)


cpp*_*guy 5

// 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)