Qt - 更改QWidget布局
假设我们有一个QWidget
和一个名为general_layout
的QLayout
,其中包含其他小部件和布局。 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);
的问题是,删除布局时的布局的部件不被破坏。这会导致myQWidget的所有子部件仍然存在,无需布局。
解决方法很简单:添加后
qDeleteAll(myQWidget->children());
delete general_layout;
似乎是这个问题。非常感谢!!!还有一个问题。我想要一个改变其结构的对话框(在这个问题的方面)。所以我通过创建布局,删除和创建一个新的。这是一个好方法吗? – Narek 2010-06-07 15:32:27
可能是如果你不需要第一个结构了。如果你这样做,使用QStackedLayout(http://doc.trolltech.com/latest/qstackedlayout.html)要容易得多。 如果你想实现像向导一样的东西,看看QWizard(http://doc.trolltech.com/latest/qwizard.html)。 – Job 2010-06-07 15:37:33
qDeleteAll(myQWidget-> children());函数删除所有的孩子,但孩子的孩子呢。我的意思是在myQWidget的子元素中,没有布局是general_layout的子布局。当我调用general_layout的子布局的方法时,我的应用程序爆炸了(所以我认为指针被销毁),但是当我检查它是否等于0(m_childLayout_of_General_Layout == 0)时,则忽略语句。怎么了?它被删除或不是? – Narek 2010-06-07 18:08:25
你能具体谈谈你的问题?你在做什么似乎是正确的(即在设置新的布局之前删除旧的布局)。 – Job 2010-06-07 14:38:46
当然!我执行以下操作: delete general_layout; general_layout = new QHBoxLayout; general_layout-> addLayout(some_layout); myQWidget-> setLayout(general_layout); – Narek 2010-06-07 14:57:56