尝试使用非空指针到QGridLayout(Qt)时的SegFault

时间:2013-09-05 15:21:13

标签: c++ qt

我正在尝试编写一个布局管理器,它能够显示所有添加的小部件,过滤它们或调整其中一些小部件。我有一个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);
    }
}

2 个答案:

答案 0 :(得分:0)

我打赌currentGrid已被删除。

无论如何,delete mainLayout;不喜欢我。之后添加mainLayout = 0; ...

答案 1 :(得分:0)

您的代码不完整,但连续删除和重新创建布局没有多大意义。

您对布局的“清除”不正确。你想要:

void clearLayout(QLayout * layout) {
    while (layout->count() > 0) delete layout->takeAt(0);
}