Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修复QT中的子布局/小部件位置_Qt - Fatal编程技术网

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

修复QT中的子布局/小部件位置,qt,Qt,我想知道是否有任何方法可以修复父布局中的子布局。例如 QVBoxLayout *vbox = new QVBoxLayout; // adding pushbuttons/layouts... vbox->addWidget(one); vbox->addWidget(two); vbox->addWidget(three); vbox->addWidget(four); 现在,按照添加的顺序,这将以垂直布局中的四个按钮/布局结束。但如果我删除按钮/布局“一”、“二”和

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

QVBoxLayout *vbox = new QVBoxLayout;
// adding pushbuttons/layouts...
vbox->addWidget(one);
vbox->addWidget(two);
vbox->addWidget(three);
vbox->addWidget(four);
现在,按照添加的顺序,这将以垂直布局中的四个按钮/布局结束。但如果我删除按钮/布局“一”、“二”和“三”

完成此操作后,当您删除“四”上方的小部件时,按钮“四”将在布局中向上移动。我不想发生这种事

有没有办法,即使我删除了上面的小部件/布局,我也需要最后一个小部件/布局保持在当前位置。 我如何做到这一点

更新:我在做实验,我能用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没有它就无法工作。 这是插槽删除\u btns()

当我点击“一”时,前三个按钮消失,第四个按钮保持不变。但如果我不给出QT::AlignBottom,它就不起作用。而且,这些排列方式对我来说是个谜,我无法找到它们到底是如何工作的


这绝对不是一个答案…,因为我不明白它是如何工作的:p

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

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

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

如果你要立即替换你删除的小部件,你可以随时按索引插入新的小部件

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

事实上,我希望以前的小部件被新的小部件替换,所以我可以通过隐藏以前的小部件来显示新的小部件吗?无论如何,隐藏对象会占用内存,我不希望这样。@aditya-使用QStackedLayout或QStackedWidget。只要它们大小相同,并且在删除旧的之前添加新的,那么这样做就不会有任何问题。好的。我从来没有使用过这个堆叠的小部件,因为我是新手,所以我会尝试一下。谢谢
one->hide();
two->hide();
three->hide();
void insertWidget ( int index, QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0 )