QTreeView& QAbstractItemModel& insertRow具体了解

时间:2013-08-15 10:18:36

标签: qt insertion qtreeview qabstractitemmodel

我已经实现了我的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不需要它。

0 个答案:

没有答案