将 QStackedWidget 调整为打开的页面[重复]

Posted

技术标签:

【中文标题】将 QStackedWidget 调整为打开的页面[重复]【英文标题】:Resize QStackedWidget to the page which is opened [duplicate] 【发布时间】:2013-01-23 13:19:04 【问题描述】:

我希望我的QStackedWidget 调整为打开的页面。

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

如何使我的QStackedWidget 具有正在查看的页面的大小。

我想这样做的原因是我有三个不同的选择,然后我还有其他的东西。如果我更改为有按钮的模式,然后有很多空白,我看不出它为什么不调整大小。

【问题讨论】:

【参考方案1】:

你可以使用这个Resizable StackedWidget

在我的实践中,我记得我有从 QStackedWidget 派生的类,并重新定义了 addWidget 方法。在这种方法中,我接下来做了:

void ResizableStackedWidget::addWidget(QWidget* pWidget)

   pWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
   QStackedWidget::addWidget(pWidget);

并通过此插槽连接到 currentChange(QWidget*) 信号:

void ResizableStackedWidget::onCurrentChanged(int index)

   QWidget* pWidget = widget(index);
   Q_ASSERT(pWidget);
   pWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
   pWidget->adjustSize();
   adjustSize();

【讨论】:

【参考方案2】:
// 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);

【讨论】:

谢谢!你每次都这样吗?就在你创建它的时候?我不明白!对不起。你到底什么时候做这个?我创建所有小部件,我添加它们...但我不知道您可以为每个页面设置策略。 设置扩展到页面,不起作用... 当当前页面改变时这样做 您需要对 QStackedWidget 本身有一个良好的尺寸策略,并且在更改页面小部件的尺寸策略后,我似乎也需要在 QStackedWidget 上调用 adjustSize()。【参考方案3】:

您可以将带有单个按钮的页面包装到垂直布局的 QFrame 中,并在底部添加间隔。

【讨论】:

以上是关于将 QStackedWidget 调整为打开的页面[重复]的主要内容,如果未能解决你的问题,请参考以下文章

滑动 QStackedWidget 页面

Qt QStackedWidget 调整大小问题

如何将 QStackedWidget 大小设置为子小部件的最小尺寸?

使用 Qt Creator 中设计的自定义小部件将页面动态添加到 QStackedWidget

在 QStackedWidget 对象内定位内部小部件

QT如何实现QStackedWidget界面间的切换