【问题标题】:Deleting QStandardItems from QStandardItemModel从 QStandardItemModel 中删除 QStandardItems
【发布时间】:2019-06-13 05:19:01
【问题描述】:

我正在尝试使用QPersistentIndexQStandrditemModel 中删除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
}

The Screenshot

【问题讨论】:

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

标签: qt delete-row qstandarditemmodel qstandarditem


【解决方案1】:

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

    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 代码,似乎正在发生的事情是删除单个项目并不会删除包含该项目的行,即使它是该行中唯一的项目。

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

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 2014-06-09
    • 1970-01-01
    • 2013-09-08
    • 2022-11-23
    • 2013-05-12
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多