我正在尝试编写一个布局管理器,它能够显示所有添加的小部件,过滤它们或调整其中一些小部件。我有一个QWidget子类,它有小部件的currentList,所有小部件的列表,在上次更改之前显示的小部件的prevList。 它还有一个currentGrid(QGridLayout *),它相应地显示小部件,mainLayout保存网格和一些按钮。
如果发生了变化,我调用updateLayout函数,其摘要如下: - 从currentGrid填充prevList - 清除并删除mainLayout - 清除currentGrid - 从currentList填充currentGrid - 创建新的mainLayout - addButtons - 添加currentGrid
当我只添加一个小部件时,它的效果非常好。当我尝试添加第二个时,它会产生一个段错误。
以下是我清除mainLayout的方法
if(mainLayout) //clear mainLayout
{
while(mainLayout->count() > 0)
mainLayout->takeAt(0);
delete mainLayout;
}
以下是此代码的下一行,其中发生了段错误,由( - >)显示。
if(currentGrid)
{
-->while(currentGrid->count() > 0)
{
currentGrid->takeAt(0);
}
}
答案 0 :(得分:0)
我打赌currentGrid
已被删除。
无论如何,delete mainLayout;
不喜欢我。之后添加mainLayout = 0;
...
答案 1 :(得分:0)
您的代码不完整,但连续删除和重新创建布局没有多大意义。
您对布局的“清除”不正确。你想要:
void clearLayout(QLayout * layout) {
while (layout->count() > 0) delete layout->takeAt(0);
}