【发布时间】:2019-06-13 05:19:01
【问题描述】:
我正在尝试使用QPersistentIndex 从QStandrditemModel 中删除QStandardItems。项目已成功删除,但在遍历模型时,已删除的行显示为没有任何数据。
我正在使用以下代码来删除项目:
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
}
【问题讨论】:
-
model==this? -
我的失败...您的代码是否以一种方法执行?有真正的理由使用
QPersistentModelIndex而不是QModelIndex?你在第三个循环中做什么? -
我使用了 QPersistentModelIndex,因为当我尝试删除多个项目时,删除第一个项目时 QModelIndex 会发生变化。这就是我使用 QPersistentModel 索引的原因。第三个循环不在同一个函数中,它在另一个函数中。在这个循环中,我再次选择索引广告执行操作,例如编辑选定的项目,然后奇怪的行为如截图所示。
-
我实际上并没有找到解决方案。但是我发现了另一种奇怪的行为,当我尝试使用一些 UI 组件设置界面时,然后对于一个组合框,如果我更改其索引或注释(//)这一行。然后,当执行第三个循环时,我没有得到树中的空项目。我知道这根本没有意义。但这就是它的工作原理。我不知道为什么。
-
为什么不删除
QStandardItem?建立项目列表QList<QStandardItem *>并调用qDeleteAll。
标签: qt delete-row qstandarditemmodel qstandarditem