我想知道是否有任何方法可以修复父布局中的子布局。例如......
QVBoxLayout *vbox = new QVBoxLayout;
// adding pushbuttons/layouts...
vbox->addWidget(one);
vbox->addWidget(two);
vbox->addWidget(three);
vbox->addWidget(four);
现在,这将按照添加顺序的垂直布局中的四个按钮/布局结束。但如果我删除按钮/布局“一”,“两”和“三”......
vbox->removeWidget(one);
vbox->removeWidget(two);
vbox->removeWidget(three);
执行此操作后,当您在“四”上移除小部件时,按钮“四”将向上移动布局。我不希望这种情况发生。
有没有办法,即使我删除顶部的小部件/布局,我需要最后的小部件/布局保持在当前的位置。 我如何实现这一目标?
更新:我正在进行实验,而且有点能够使用QGridLayout实现我想要的功能。这是代码,但我使用的是QGridLayout而不是QVBoxLayout。
connect(one,SIGNAL(clicked()),this,SLOT(remove_btns()));
g = new QGridLayout(this);
g->addWidget(one,0,0,1,2);
g->addWidget(two,1,0,1,2);
g->addWidget(three,2,0,1,2);
g->addWidget(four,3,0,1,2,Qt::AlignBottom);
setLayout(g);
如果我删除上面的三个按钮,第四个按钮就会停留在原来的位置,因为 QT :: AlignBottom ,如果没有那个按钮,它就无法工作。 这是SLOT remove_btns()
void test::remove_btns()
{
g->removeWidget(one);
g->removeWidget(two);
g->removeWidget(three);
delete one;
delete two;
delete three;
}
当我点击“one”时,前三个按钮消失,第四个按钮停留在原来的位置。但如果我不提供 QT :: AlignBottom ,它就不起作用。此外,这些对齐事情对我来说是一个谜,我无法找到它们究竟是如何工作的。
这绝对是 NOT 答案......,因为我不明白它是如何运作的:P
答案 0 :(得分:2)
如果您要立即替换已删除的小部件,则始终可以按索引插入新的小部件。
void insertWidget ( int index, QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0 )
答案 1 :(得分:1)
是的,只需隐藏小部件而不是删除它们:
one->hide();
two->hide();
three->hide();
如果你真的必须删除小部件,也许你可以用一些轻量级小部件替换它们,例如没有文本的QLabel
。