Qt 从QStandardItemModel中删除QStandardItem

Qt 从QStandardItemModel中删除QStandardItem,qt,delete-row,qstandarditemmodel,qstandarditem,Qt,Delete Row,Qstandarditemmodel,Qstandarditem,我正在尝试使用QPersistentIndex从qstandarditemmodel中删除qstandarditem。项目已成功删除,但在模型中迭代时,删除的行将显示为没有任何数据 我正在使用以下代码删除项目: QList<QPersistentModelIndex> selectedIndexes; foreach (const QModelIndex &modelIndex, this->selectionModel()->selectedIndexes()

我正在尝试使用
QPersistentIndex
qstandarditemmodel
中删除
qstandarditem
。项目已成功删除,但在模型中迭代时,删除的行将显示为没有任何数据

我正在使用以下代码删除项目:

QList<QPersistentModelIndex> selectedIndexes;

foreach (const QModelIndex &modelIndex, this->selectionModel()->selectedIndexes())
{
    selectedIndexes << modelIndex;
}

foreach (const QPersistentModelIndex &index, selectedIndexes)
{
    QPersistentModelIndex parentIndex = index.parent();   
    model->removeRow(index.row(),parentIndex); 
}

// In another function
foreach (const QModelIndex &index, this->selectionModel()->selectedIndexes())
{ // do soemthing and the items appear without any data as shown
  // in the image below
}
QList选择的索引;
foreach(const QModelIndex&modeleindex,this->selectionModel()->selectedindex())
{
已选择索引移除行(index.row(),parentIndex);
}
//在另一个功能中
foreach(const QModelIndex&index,this->selectionModel()->selectedIndex())
{//dosoemthing和项目显示时没有任何数据,如图所示
//如下图所示
}

我发现删除这些项似乎不能正确地清理模型。我尝试了各种解决方法,其中一种有效的方法是:

    QList <QStandardItem *> items = ...some list of items to remove...

    for (int i = 0; i < items.count (); i++)
    {
        QStandardItem *parent = items[i]->parent ();

        if (parent)
        {
            QList <QStandardItem *> row_items = parent->takeRow (items[i]->row ());
            qDeleteAll (row_items);
        }
    }
QList items=…要删除的某些项的列表。。。
对于(inti=0;iparent();
如果(家长)
{
QList row_items=parent->takeRow(items[i]->row());
qDeleteAll(第11行项目);
}
}
使用“takeChild”不起作用,我尝试的任何其他机制也不起作用。如果不深入研究Qt代码,似乎正在发生的事情是,删除单个项并不是删除包含该项的行,即使它是行中唯一的项


在我的例子中,我每行只有一个项目,因此上面的代码是安全的,但是如果“项目”列表可能在同一行中包含两个或更多项目,那么上面的代码将不稳定,因为删除列表中遇到的第一个项目的行为也将删除另一个项目。

是否
model
==
?我的失败。。。您的代码是否在一个方法中执行?是否有真正的理由使用
QPersistentModelIndex
而不是
QModelIndex
?在第三个循环中您在做什么?我使用了QPersistentModelIndex,因为当我尝试删除多个项目时,当删除第一个项目时,QModelIndex会发生变化。这就是我使用QpersistentModelIndex的原因。第三个循环不在同一个函数中,它在另一个函数中。在这个循环中,我再次选择索引并执行操作,例如编辑所选项目,然后奇怪的行为如屏幕截图所示。我实际上没有找到解决方案。但是我发现了另一个奇怪的行为,当我尝试设置一些UI组件的界面时,对于一个组合框,如果我在这一行更改其索引或注释(//)。然后,当执行第三个循环时,我不会在树中获取空项。我知道这毫无意义。但这就是它的工作原理。我不知道为什么。为什么不删除
QStandardItem
?构建项目列表
QList
并调用
qdeletall