2010-06-07 421 views
6

假设我们有一个QWidget和一个名为general_layoutQLayout,其中包含其他小部件和布局。 general_layout被设置为QWidget布局是这样的:Qt - 更改QWidget布局

setLayout(general_layout) 

现在我应该改变QWidget内容。我怎样才能做到这一点?我试图删除并为QWidget创建新布局,并将该新布局设置为QWidget的布局,但无法成功完成我的意图。

这是我的代码:

delete general_layout; 
general_layout = new QHBoxLayout; 
general_layout->addLayout(some_layout); 
myQWidget->setLayout(general_layout); 
+0

你能具体谈谈你的问题?你在做什么似乎是正确的(即在设置新的布局之前删除旧的布局)。 – Job 2010-06-07 14:38:46

+0

当然!我执行以下操作: delete general_layout; general_layout = new QHBoxLayout; general_layout-> addLayout(some_layout); myQWidget-> setLayout(general_layout); – Narek 2010-06-07 14:57:56

回答

11

的问题是,删除布局时的布局的部件不被破坏。这会导致myQWidget的所有子部件仍然存在,无需布局。

解决方法很简单:添加后

qDeleteAll(myQWidget->children()); 

delete general_layout; 
+0

似乎是这个问题。非常感谢!!!还有一个问题。我想要一个改变其结构的对话框(在这个问题的方面)。所以我通过创建布局,删除和创建一个新的。这是一个好方法吗? – Narek 2010-06-07 15:32:27

+4

可能是如果你不需要第一个结构了。如果你这样做,使用QStackedLayout(http://doc.trolltech.com/latest/qstackedlayout.html)要容易得多。 如果你想实现像向导一样的东西,看看QWizard(http://doc.trolltech.com/latest/qwizard.html)。 – Job 2010-06-07 15:37:33

+0

qDeleteAll(myQWidget-> children());函数删除所有的孩子,但孩子的孩子呢。我的意思是在myQWidget的子元素中,没有布局是general_layout的子布局。当我调用general_layout的子布局的方法时,我的应用程序爆炸了(所以我认为指针被销毁),但是当我检查它是否等于0(m_childLayout_of_General_Layout == 0)时,则忽略语句。怎么了?它被删除或不是? – Narek 2010-06-07 18:08:25