0

この関数は、QTable ビューにアタッチされた QStandardItemModel から行を削除する必要があります。

void ModManager::delete_Addin(int index)
{
    QString addinId;
    int i;

    addinId = tableModel->item(index,0)->text();

    for(i=0;i<modList->size();i++)
    {
        if(modList->at(i)->Id() == addinId)
        {
            delete modList->takeAt(i);
            break;
        }
    }
    tableModel->removeRow(index);
}

奇妙なことは、プログラムが最後の命令でクラッシュすることです。有効tableModel->removeRow(index); であるため、範囲外にはなりません。tableModel->item(index,0)では、それは何でしょうか?

4

1 に答える 1

0

modListコードはとの間の相対性を示していませんtableModeltableModel->item(index,0)変更前は有効でしたがmodListtableModel->rowAt(index)変更後は無効になります。いくつかの可能性があります:

@vahancho が示すように、変更modListは に影響します。tableModelこれは、for ループをコメントアウトするか、行の順序を変更することで確認できます。これはmodList、の実際のデータとして使用することによって導くことができますtableModel。たとえば、 as を返しmodList->at(i)、 asQTableModel::Dataを返すことによってカスタム QTableModel を実装してmodList->count()QTableModel::rowCount()ますか?

modListには影響しませんtableModelが、アイテムは別の場所で参照されていました。これはコードからはわかりません。

于 2014-03-26T04:58:58.013 に答える