1

から純粋な関数を実装するだけで定義された通常の クラスを考えます。ModelQAbstractItemModel

モデルを円グラフで表示する必要があり (この例QAbstractItemViewのように) 、保護されたスロットから派生させて再実装することを考えました。

実際には、QAbstractItemView他の純粋仮想関数を実装する必要があります。

virtual QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers);
virtual int horizontalOffset() const;
virtual int verticalOffset() const;
virtual bool isIndexHidden(const QModelIndex&) const;
virtual void setSelection(const QRect&, QItemSelectionModel::SelectionFlags);
virtual QRegion visualRegionForSelection(const QItemSelection&) const;
virtual QRect visualRect (const QModelIndex&) const;
virtual void scrollTo(const QModelIndex&, ScrollHint);
virtual QModelIndex indexAt(const QPoint&) const;

この関数のほとんどは私の場合は役に立たず、現在のところ0、デフォルト値 ( などreturn QRect();) または無効な値 (など) を返していますreturn QModelIndex()

私の質問は次のとおりです。これらの関数は何に使用されることになっていますか (はい、私はRTFMですが、返すべき値はほとんどわかりません)。私がやっているように、それらを無視して、影響を期待しないことはできますか?

4

1 に答える 1

2

あなたは独自のビューのユーザーであるため、完全にあなた次第です。完全に機能するビューが気に入らない場合は、問題ありません。関数は、ビュー内の項目の選択およびキーボード/マウス操作に使用されます。必要がなければ、その機能を提供しなくてもかまいません。

おそらくスクロール以外の対話をサポートしない読み取り専用ビューの多くでは、 a から派生することQAbstractItemViewはかなり無意味です。代わりに使用する内部クラスがあります。IMHO、Qt は QAbstractItemView クラスをさらに分割して、相互作用のないビューがより単純なものを使用するようにする必要があります。

Qt 自体が実装していない多くのビューを提供しているという事実に安心するかもしれませんQAbstractItemView。すべてのQMLビューのように:)

「ビュー」の最小要件は、それが から派生することQObjectです。結局のところ、何らかのモデルからのデータを消費する、GUI 以外の「ビュー」を持つことができます。プロキシ モデルはそのようなものです。モデルにアタッチされる GUI のないビューであると同時に、モデル自体でもあります。ソース モデルにとって、プロキシはビューのようなものです。ユーザーにとって、プロキシはモデルのようなものです。

于 2013-09-05T19:10:39.447 に答える