3

我已经根据 editabletreemodel 示例以及此处的建议实现了我的 QTreeView & QAbstractItemModel :QTreeView & QAbstractItemModel & insertRow

它工作,好的。但是有一个我不明白的区别。

为了让我的应用程序在插入子行时正常工作,我必须发出 layoutChanged()。我不得不。如果我不发出 - 插入一个孩子效果不好:一个新孩子正确出现在模型中,它被正确保存(当我保存时),但它没有显示在视图中。

editabletreemodel 示例不包含“emit layoutChanged()”,它可以很好地插入孩子。

这是我的 QAbstractItemModel 兄弟类的 insertRows 方法:

bool ExTree::insertRows(int position, int rows, const QModelIndex &parent)
{
    ExObject *parentItem = getItem(parent);
    bool success;

    beginInsertRows(parent, position, position + rows - 1);
    success = parentItem->insertChildren(position, rows, rootItem->columnCount());
    endInsertRows();

    if(success) emit layoutChanged();
    return success;
}

它几乎就像可编辑树视图示例中的那些,唯一的区别是发射。

告诉我为什么?

我想了解,为什么我需要发出 layoutChanged(),而 editabletreeview 不这样做。如果有人能解释这一点,将不胜感激。

我不需要理解为什么要发射。我需要了解为什么需要发出和 editabletreeview 不需要它。

4

0 回答 0