Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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-更改QWidget布局 让我们考虑一个 QWIDGET < /C>和一个 qFrase命名为 Gynall Deale,其中包含其他小部件和布局。code>general_layout设置为QWidget布局,如下所示: setLayout(general_layout)_Qt_Layout_Qt4_Qwidget - Fatal编程技术网

Qt-更改QWidget布局 让我们考虑一个 QWIDGET < /C>和一个 qFrase命名为 Gynall Deale,其中包含其他小部件和布局。code>general_layout设置为QWidget布局,如下所示: setLayout(general_layout)

Qt-更改QWidget布局 让我们考虑一个 QWIDGET < /C>和一个 qFrase命名为 Gynall Deale,其中包含其他小部件和布局。code>general_layout设置为QWidget布局,如下所示: setLayout(general_layout),qt,layout,qt4,qwidget,Qt,Layout,Qt4,Qwidget,现在我需要更改QWidget的内容。我该怎么做?我已尝试删除并创建QWidget的新布局,并将该新布局设置为QWidget的布局,但未能成功完成我的意图 这是我的代码: delete general_layout; general_layout = new QHBoxLayout; general_layout->addLayout(some_layout); myQWidget->setLayout(general_layout); 问题在于,删除布局时不会破坏布局的小部件。这会

现在我需要更改
QWidget
的内容。我该怎么做?我已尝试删除并创建
QWidget
的新布局,并将该新布局设置为
QWidget
的布局,但未能成功完成我的意图

这是我的代码:

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

问题在于,删除布局时不会破坏布局的小部件。这会导致myQWidget的所有子widget仍然存在,即使没有布局

解决方案很简单:添加一个

qDeleteAll(myQWidget->children());
之后


你能更具体地谈谈你的问题吗?你所做的似乎是正确的(即在设置新布局之前删除旧布局)。当然!我执行以下操作:删除总体布局;总布局=新的QHBoxLayout;总体布局->添加布局(部分布局);myQWidget->setLayout(常规布局);看来这就是问题所在。谢谢!!!还有一个问题。我想有一个改变其结构的对话框(在这个问题的方面)。所以我通过创建布局、删除和创建一个新布局来实现这一点。这是一个好的方法吗?如果你不再需要第一个结构的话。如果这样做,那么使用QStackedLayout()就容易多了。如果您试图实现类似于向导的东西,请查看QWizard().qdeletall(myQWidget->children());函数删除所有的child,但child的child呢。我的意思是,在myQWidget的子元素中,没有属于general_布局的子布局。当我调用general_layout的子布局的方法时,我的应用程序会崩溃(因此我认为指针会被破坏),但当我检查它是否等于0(m_childLayout_of_general_layout==0)时,if语句会被忽略。怎么了是否已删除?是的,所有子项(直接或间接)都已删除(请查看)。在C++中,调用指针上的删除不将此指针设置为0。这就是为什么你的if语句不起作用。正如我之前所说的,如果您仍然需要旧的小部件,那么使用QStackedLayout可能是一个不错的选择。也许您应该让子部件成为它们所在布局的子部件,而不是它们的逻辑祖父母?
delete general_layout;