我正在使用Qt 5.5.0 for Windows。在用于登录和注册的对话框中,我使用QVBoxLayout作为对话框的主要布局,并将QGridLayout添加到mainLayout。当我点击"注册"按钮,它会为寄存器添加太多LineEdits,当我再次单击它时,这些LineEdits将被删除。但是,当我删除GridLayout中的小部件时,小部件仍然存在,并且窗口没有调整大小。
我没有足够的声誉来添加图片,所以我在这里上传了iamges: http://i.imgbox.com/WAS6KAQw.png
这是我的一些代码,那么如何删除网格布局中的小部件?
r = []
for <outer> in <list>:
for <inner> in <outer>:
r.append(<inner>)
答案 0 :(得分:0)
您只是从布局中删除,而不是父窗口小部件,因此它们显示在窗口小部件中而不是&#34; layouted&#34;。
尝试使用setVisible(false)
隐藏它们,然后setVisible(true)
再次显示它们。
void LoginDialog::showRegister()
{
...
useremailLabel->setVisible(true);
...
}
void LoginDialog::hideRegister()
{
...
useremailLabel->setVisible(false);
...
}
答案 1 :(得分:0)
您应该使用setHidden( bool )
,setVisible( bool )
函数之一。如果你只使用你所做的removeWidget
功能,那么你只能从布局中删除它。
答案 2 :(得分:0)
如果你真的想要摆脱小部件,你应该破坏它们。如果它们是在堆上分配的,那么你应该简单地delete
:它们在破坏它们之后释放它们的内存。
Qt跟踪窗口小部件的生命周期,被破坏的窗口小部件会自动从布局中移除自身,并将其自身从父窗口中删除。