Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT-QTableView removeRow()崩溃_C++_Qt_Qtableview_Qstandarditemmodel - Fatal编程技术网

C++ QT-QTableView removeRow()崩溃

C++ QT-QTableView removeRow()崩溃,c++,qt,qtableview,qstandarditemmodel,C++,Qt,Qtableview,Qstandarditemmodel,此函数应该从附加到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)-

此函数应该从附加到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);
}
void ModManager::delete_Addin(int索引)
{
QString-addinId;
int i;
addinId=tableModel->item(索引,0)->text();
对于(i=0;isize();i++)
{
如果(modList->at(i)->Id()==addinId)
{
删除modList->takeAt(i);
打破
}
}
tableModel->removeRow(索引);
}
奇怪的是,程序在最后一条指令时崩溃,
tableModel->removeRow(index)
而且它没有超出范围,因为
tableModel->item(index,0)
是有效的。
那么可能是什么呢?

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

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


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

我会尝试调用
deletemodlist->takeAt(I)在我调用
tableModel->removeRow(索引)之后。如果它被压碎,则超出范围。检查调试控制台的说明。Do
if(index>-1&&indexrowCount()){tableModel->removeRow(index);}
ok ModList是一个QList,带有指向
Addin
的指针,这是我创建的一个自定义对象,无法修改表中的任何内容。我不知道它会如何影响这个表,只是试着把
deletemodlist->takeAt(I)在循环开始之前。仍然崩溃。我仔细检查了通过的
索引,它在范围内。可能是什么?我猜这个项目是在其他地方引用的。如果您确定项目索引在范围内且有效,则删除其他人引用的内容可能会导致崩溃。为什么不在崩溃时发布回调堆栈,以便人们可以帮助您。好的,我如何找到回调堆栈以在此处发布?