我已经根据 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 不需要它。