在QT中修复子布局/小部件位置

时间:2011-09-28 06:33:43

标签: qt

我想知道是否有任何方法可以修复父布局中的子布局。例如......

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

2 个答案:

答案 0 :(得分:2)

如果您要立即替换已删除的小部件,则始终可以按索引插入新的小部件。

void insertWidget ( int index, QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0 )

答案 1 :(得分:1)

是的,只需隐藏小部件而不是删除它们:

one->hide();
two->hide();
three->hide();

如果你真的必须删除小部件,也许你可以用一些轻量级小部件替换它们,例如没有文本的QLabel