将 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 大小设置为子小部件的最小尺寸?