0

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

2 回答 2

0

Your code is incomplete, but it doesn't make much sense to continuously delete and recreate the layouts.

Your "clearing" of the layout is incorrect. You want:

void clearLayout(QLayout * layout) {
    while (layout->count() > 0) delete layout->takeAt(0);
}
于 2013-09-05T20:18:54.040 回答
0

我打赌currentGrid已被删除。

反正delete mainLayout;不喜欢我。后面加上mainLayout = 0;...

于 2013-09-05T15:42:18.607 回答