[英]SegFault while trying to use non-null pointer to QGridLayout (Qt)
我正在尝试编写一个布局管理器,它能够显示所有添加的小部件,对其进行过滤或调整其中的一些大小。 我有一个QWidget子类,该子类具有小部件的currentList,所有小部件的列表,上一个更改之前显示的小部件的prevList。 它还具有一个currentGrid(QGridLayout *)(用于显示相应的小部件)和mainLayout(用于保存网格和一些按钮)。
如果发生更改,我将调用updateLayout函数,其摘要如下:-从currentGrid填充prevList-清除并删除mainLayout-清除currentGrid-从currentList填充currentGrid-创建新的mainLayout-addButtons-添加currentGrid
当我仅添加1个小部件时,效果很好。 当我尝试添加第二个时,它会出现段错误。
这是我清除mainLayout的方法
if(mainLayout) //clear mainLayout
{
while(mainLayout->count() > 0)
mainLayout->takeAt(0);
delete mainLayout;
}
这是此代码的下一行,并且通过(->)显示发生段错误的位置。
if(currentGrid)
{
-->while(currentGrid->count() > 0)
{
currentGrid->takeAt(0);
}
}
我敢打赌currentGrid
已被删除。
无论如何, delete mainLayout;
不喜欢我 添加mainLayout = 0;
之后...
您的代码不完整,但是连续删除并重新创建布局没有多大意义。
您对布局的“清除”是不正确的。 你要:
void clearLayout(QLayout * layout) {
while (layout->count() > 0) delete layout->takeAt(0);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.