从QStandardItemModel中删除QStandardItems

时间:2014-04-15 08:55:34

标签: qt delete-row qstandarditemmodel qstandarditem

我正在尝试使用QStandardItemsQStandrditemModel删除QPersistentIndex。项已成功删除,但在遍历模型时,删除的行显示为没有任何数据。

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

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

1 个答案:

答案 0 :(得分:0)

我发现,删除项目似乎无法正确清理模型。我尝试了多种解决方法,而可行的方法是:

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

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