QT - QTableView removeRow()崩溃

时间:2014-03-25 20:47:07

标签: c++ qt qtableview qstandarditemmodel

此函数应从附加到QTable View的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)是有效的。 那可能是什么呢?

1 个答案:

答案 0 :(得分:0)

代码不会显示modListtableModel之间的相关性。更改tableModel->item(index,0)之前modList有效,而修改后tableModel->rowAt(index)无效。有几种可能性:

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

modList不会影响tableModel,但该项目已在其他地方引用。从代码中无法分辨出来。