QAbstractItemModelQt では、既存のデータ構造をラップする独自のツリー モデルを (サブクラス化によって) 作成しています。モデルを介してだけでなく、内部で (モデルを介してではなく) データ構造を更新できる必要があります (ビューが変更できるようにするため)。よりよく想像するために: これは、シーン ビューを使用して (Qt モデルを介さずに) 編集できるシーン グラフですが、アウトライナー (QTreeViewシーン グラフのプロキシとして Qt モデルを使用する) を使用して編集することもできます。
混乱を避けるために、2 つの異なるシナリオを検討する必要があります (以下では、例として「削除」操作を使用します)。
ユーザーは Qt ビューを使用してノードを削除します。ビューは、 を使用してモデルから行を削除したいと考えてい
QAbstractItemModel::removeRowます。これにより、基になるデータ構造であるシーン グラフから対応するノードが削除されます。
ユーザーはシーン ビューを使用してノードを削除します。シーン ビューは、シーン グラフからノードを削除したいと考えています。シーン グラフをラップするモデルは通知を受け取り、次に接続されたビューに行が削除されたことを通知したいと考えています。

1.の実装方法はわかっていると思いますが、2.の通知部分の実装方法がわかりません。信号と、友達のように聞こえる信号がありQAbstractItemModel::rowsAboutToBeRemoved()ますrowsRemoved()。しかし、それらはプライベート シグナルです (ヘッダー ソース コードでは、「QAbstractItemModel によってのみ発行できます」と記述されています)。もありますがbeginRemoveRows()、endRemoveRows()ドキュメントによると、更新がビューから発生したとき、つまり が呼び出されたときに呼び出す必要がありますremoveRow。また、それらを使用しようとすると、ビューが完全に台無しになりました。
ドキュメントによると、モデルクラスが自己変更データをモデル化できることを意図していないようです。別の例として、ファイル システムを考えてみましょう。ディレクトリの変更を検出できるファイル システム監視を使用する場合、ビューがファイル システムの変更に使用されていない場合でも、ディレクトリの変更をライブで表示できるように、モデルはビューに通知する必要があります。そのようなモデルはQtでも可能ですか?