首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从QStandardItemModel中删除QStandardItems

从QStandardItemModel中删除QStandardItems
EN

Stack Overflow用户
提问于 2014-04-15 16:55:34
回答 1查看 912关注 0票数 1

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

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

代码语言:javascript
复制
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
}

The Screenshot

EN

回答 1

Stack Overflow用户

发布于 2019-06-13 05:19:02

我发现删除项目似乎并不能正确地清理模型。我尝试了各种变通方法,其中一个有效的变通方法是:

代码语言:javascript
复制
    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);
        }
    }

使用"takeChild“不起作用,我尝试过的任何其他机制也不起作用。如果不深入研究Qt代码,似乎正在发生的情况是,删除单个项目并不等于删除包含该项目的行,即使它是行中的唯一项目。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23078902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档