我已经实现了我的QTreeView& QAbstractItemModel根据editabletreemodel示例加上此处的建议: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;
}
它几乎与editabletreeview示例中的那些一样,唯一的区别是emit。
为什么,拜托?
我想明白,为什么我需要发出layoutChanged(),而editabletreeview不会这样做。如果有人能解释这一点,将会非常感激。
我不需要理解为什么要发射。我需要解释为什么我需要发出并且editabletreeview不需要它。