0

追加されたすべてのウィジェットを表示したり、それらをフィルタリングしたり、一部のサイズを変更したりできるレイアウト マネージャーを作成しようとしています。ウィジェットのcurrentList、すべてのウィジェットのリスト、最後の変更前に表示されるウィジェットのprevListを持つQWidgetサブクラスがあります。それに応じてウィジェットを表示する currentGrid(QGridLayout*) と、グリッドといくつかのボタンを保持する mainLayout もあります。

変更が発生した場合は、updateLayout 関数を呼び出します。その概要は次のとおりです。 - currentGrid から prevList を埋める - mainLayout をクリアして削除する - currentGrid をクリアする - currentList から currentGrid を埋める - 新しい mainLayout を作成する - addButtons - currentGrid を追加する

ウィジェットを 1 つだけ追加すると、非常にうまく機能します。秒を追加しようとすると、segfault が発生します。

mainLayoutをクリアする方法は次のとおりです

if(mainLayout) //clear mainLayout
{
    while(mainLayout->count() > 0)
        mainLayout->takeAt(0);
    delete mainLayout;
}

これはこのコードの次の行で、segfault が発生する場所は (-->) で示されています。

if(currentGrid)
{
    -->while(currentGrid->count() > 0)
    {
        currentGrid->takeAt(0);
    }
}
4

2 に答える 2

0

削除されたにcurrentGrid違いない。

とにかく、delete mainLayout;私が好きではありません。その後に追加mainLayout = 0;...

于 2013-09-05T15:42:18.607 に答える