追加されたすべてのウィジェットを表示したり、それらをフィルタリングしたり、一部のサイズを変更したりできるレイアウト マネージャーを作成しようとしています。ウィジェットの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);
}
}