3

で問題が発生していQStandardItemModelます。私がやりたいことは、モデルにリストを追加することです。リストが更新されたら、パラメーターに新しいリストを渡し、古いモデルをクリアして、新しいリストを追加します。これは簡単に聞こえますが、理解できないバグに遭遇しています。最初のリストをモデルに追加しても問題はありませんが、2 番目のリストを追加すると、最初のリストは正常に削除されますが (コンソールで確認できます)、アプリケーションがクラッシュします。

これが私のコードです:

void MyModel::updateList(QList<QStandardItem*> list)
{

    // Delete current model

    int rows = rowCount();
    for (int i = 0 ; i < rows ; i++)
    {
        if(item(0)->hasChildren())
        {
            int children = item(0)->rowCount();
            for (int j = 0 ; j < children ; j++)
            {
                QString name = item(0)->child(0)->accessibleText();
                qDebug()<<(name + QLatin1String("\tremoved"));
                item(0)->removeRow(0);
            }
        }
        QString itemRemoved = item(0)->accessibleText();
        qDebug()<<(itemRemoved + QLatin1String("\tremoved"));
        removeRow(0);
    }


    // Add new list to model

    for(int j=0 ; j<list.count() ; j++)
    {
        appendRow(list[j]);
        qDebug()<< (list[j]->accessibleText() + tr(" ADDED"));
    }

    printf("List UPDATED \n");
}

clear();明らかに、行ごとに削除する代わりにこのメソッドを使用してみましたが、結果は同じです。

このコードが機能しない理由がわかりません。

誰かがこの問題に光を当てることができれば、私はとても感謝しています.

4

2 に答える 2

-1

問題は、入力リストのアイテムを新しいリストに直接追加していたという事実から来ていました。入力リストが別のクラスで作成されたため、その中のアイテムの親が異なり、新しいリストからそれらを削除しようとすると、アプリケーションがクラッシュしました。

新しいアイテムから新しいリストを作成しtext()、古いリストを取得するだけで問題を解決しました。

void MyModel::updateList(QList<QStandardItem*> list)
{
    clear();

    for(int i=0 ; i<list.count() ; i++)
    {
        QStandardItem *l_item = new QStandardItem(list[i]->text());
        l_item->setEditable(false);
        l_item->setCheckable(true);
        appendRow(l_item);
        for (int j = 0 ; j<list[i]->rowCount() ; j++)
        {
            QStandardItem *l_subItem = new QStandardItem(list[i]->child(j)->text());
            l_subItem->setEditable(false);
            l_subItem->setCheckable(true);
            l_item->appendRow(l_subItem);
        }
    }
}

これは、前のコメントの 1 つで指摘されたように、入力リスト内の子のリストを実行する必要があることを意味しました。

助けてくれてありがとう

于 2014-04-28T12:38:01.657 に答える