繁体   English   中英

尝试使用指向QGridLayout(Qt)的非空指针时出现SegFault

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM