0

此函数应从我的 QStandardItemModel 中删除一行,该模型附加到 QTable 视图。

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

该代码不存在 和 之间的相对modListtableModeltableModel->item(index,0)修改前有效,修改modListtableModel->rowAt(index)无效。有几种可能:

正如@vahancho 所暗示的那样,修改modList影响。tableModel这可以通过注释掉 for 循环或更改行的顺序来验证。这可以通过modList用作 的真实数据来引导tableModel,例如,您是否通过返回modList->at(i)asQTableModel::Data和返回modList->count()as来实现自定义 QTableModel QTableModel::rowCount()

modList不影响tableModel,但该项目在其他地方被引用。这不能从代码中看出。

于 2014-03-26T04:58:58.013 回答