Qt从QHBoxLayout中移除伸展项

6
在使用QBoxLayout::addStretch添加了一个伸缩项后,我能否删除它?我想在每次添加小部件后都在布局末尾添加一个伸缩项,因此我必须先删除旧的伸缩项,然后添加新的小部件,最后再添加一个新的伸缩项。请注意保留HTML标记。

你不能使用insertWidgetcount-2处插入小部件吗? - Miki
拉伸是一个小部件吗?此外,它不应该是 -1 吗? - ulak blade
delete verticalLayout->takeAt(verticalLayout->count() - 1); - Amartel
@Miki 好的,它可以工作了,但是对于第一个元素,它会将其添加到最右边,不知道为什么。起初我只添加了 stretch,然后我在 count() - 1 处添加了第一个小部件,但它却添加到了错误的位置。每个下一个小部件都被正确地添加了。 - ulak blade
如果索引为负数,则小部件将添加到末尾。我一开始就错了,应该在索引count()-1处添加小部件,因为右侧的小部件会移动。抱歉:D - Miki
1个回答

11

不要删除并添加伸缩项,您可以从仅包含伸缩项的布局开始。

然后,不是添加新小部件,而是在layout->count()-1位置插入它。 伸缩将向右移动一个位置。

所以:

QHBoxLayout* layout = new QHBoxLayout();
layout->addStretch();
setLayout(layout);

...

layout->insertWidget(layout->count()-1, yourWidget);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接