3

editabletreemodel の例とQTreeView & QAbstractItemModel & insertRowのアドバイスに従って QTreeView & QAbstractItemModel を実装しました。

それはうまくいきます。しかし、私には理解できない違いがあります。

子行を挿入するときにアプリケーションを適切に動作させるには、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 の例とほとんど同じですが、唯一の違いはエミットです。

なぜですか?

editabletreeviewはこれを行わないのに、正確にlayoutChanged()を発行する必要がある理由を理解したいです。誰かがこの点を説明していただければ幸いです。

なぜ発するのか理解する必要はありません。なぜ発行する必要があるのか​​ 、editabletreeviewがそれを必要としないのかを理解する必要があります。

4

0 に答える 0