Qt モデル ビュー フレームワーク: QAbstractItemModel、QAbstractItemView

QAbstractItemModel

I. 概要

QAbstractItemModel クラスは、モデル/ビュー フレームワーク内の他のコンポーネントと相互運用できるように項目モデルが使用する必要がある標準インターフェイスを定義します。正しい使用法は、サブクラス化して新しいモデルを作成することです。

このクラスは、QML のアイテム ビュー要素、または Qt Widgets モジュールのアイテム ビュー クラスの基礎となるデータ モデルとして使用されます。

QML のリスト ビュー要素や C++ ウィジェット QListView または QTableView などのアイテム ビューで使用するモデルが必要な場合は、このクラスの代わりに QAbstractListModel または QAbstractTableModel をサブクラス化することを検討する必要があります。

基礎となるデータ モデルは、テーブルの階層としてビューとデリゲートに公開されます。階層を使用しない場合、モデルは単純な行とリストになります。

各項目には、QModelIndex で指定された一意のインデックスがあります。

 

1.1. サブクラス化

QAbstractItemModel を継承する場合は、少なくとも以下を実装する必要があります。

index()
parent()
rowCount()
columnCount()
data()

これらの関数はすべての読み取り専用モデルで使用され、編集可能なモデルの基礎を形成します。

モデルでの編集を有効にするには、以下も実装する必要があります。

setData()

flags() (ItemIsEditable が返されることを確認するため)

モデルのタイトルの表示方法を制御するには、次のことができます。

headerData()
setHeaderData()

setData() 関数と setHeaderData() 関数を再実装する場合は、dataChanged() と headerDataChanged() をそれぞれ明示的に通知する必要があります。

2. 会員の種類

1. enum class QAbstractItemModel::CheckIndexOption: この列挙は、checkIndex() によって実行されるチェックを制御するために使用できます (この関数は、インデックスがこのモデルの正当なモデル インデックスであるかどうかをチェックします)。

  • NoOption: オプションが指定されていません。
  • IndexIsValid: checkIndex() に渡されたモデル インデックスが有効なモデル インデックスとしてチェックされます。
  • DoNotUseParent: checkIndex() に渡されたインデックスの親の使用に関連するチェックを実行しません。
  • ParentIsInvalid: checkIndex() に渡されたモデル インデックスの親が、無効なモデル インデックスとしてチェックされます。このオプションと DoNotUseParent の両方が指定された場合、このオプションは無視されます。

2. enum QAbstractItemModel::LayoutChangeHint: この列挙は、モデルがレイアウトをどのように変更するかを説明します。

  • NoLayoutChangeHint: なし。
  • verticalSortHint: 行はソートされています。
  • 水平ソートヒント: 列はソートされています。

3. メンバー関数

3.1. プライベート信号

プライベートシグナルは、サブクラスコードで明示的にではなく、QAbstractItemModel 実装によってのみ発行できます。

プライベート信号は信号接続に使用できますが、ユーザーが送信することはできません。

1、[私有] void columnsAboutToBeInserted(const QModelIndex &parent, int first, int last)

この信号は、列がモデルに挿入される前に発行されます。新しい項目は、指定された親の下の最初と最後の間に配置されます。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

2、[私有] void columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)

この信号は、モデル内で柱が移動される前に出力されます。移動される項目は、指定されたsourceParent項目の下のsourceStartとsourceEndの間の項目です。これらは、destinationColumn 列から開始して、destinationParent に移動されます。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

3、[私有] void columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last)

この信号は、列がモデルから削除される前に発行されます。削除する項目は、指定された親の下の最初と最後の間にある項目です。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

4、[私有] void columnsInserted(const QModelIndex &parent, int first, int last)

この信号は、列がモデルに挿入された後に出力されます。新しい項目は、指定された親の下の最初と最後の間の項目です。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

5、[私有] void columnsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column)

この信号は、モデル内で列が移動された後に生成されます。親の下の start と end の間の項目は、列 column から始まる移動先に移動されました。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

6、[私有] void columnsRemoved(const QModelIndex &parent, int first, int last)

この信号は、列がモデルから削除されたときに生成されます。削除された項目は、指定された親の下の最初と最後の間の項目です。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

7. [プライベート] void modelAboutToBeReset()

このシグナルは、beginResetModel() が呼び出されたときに、モデルの内部状態 (永続モデル インデックスなど) が無効になる前に発行されます。

8. [プライベート] void modelReset()

このシグナルは、モデルの内部状態 (永続モデル インデックスなど) の有効期限が切れた後に endResetModel() が呼び出されたときに発行されます。

9、[私有] void rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)

この信号は、行がモデルに挿入される前に発行されます。新しい項目は、指定された親の下の開始と終了の間に配置されます。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

10、[私有] void rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)

この信号は、モデル内で行が移動する前に発行されます。移動される項目は、指定されたsourceParent項目の下のsourceStartとsourceEndの間の項目です。これらは、destinationRow から始まる destinationParent 行に移動されます。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

11、[私有] void rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last)

この信号は、モデルから行が削除される直前に発行されます。削除される項目は、指定された親の下の最初と最後の間にある項目です。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

12、[私有] void rowsInserted(const QModelIndex &parent, int first, int last)

この信号は、行がモデルに挿入された後に発行されます。新しい項目は、指定された親の下の最初と最後の間の項目です。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

13、[私有] void rowsMo​​ved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row)

この信号は、モデル内で行が移動された後に発行されます。指定された親の下の start と end の間の項目が、行 row から始まる宛先に移動されました。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

14、[私有] void rowsRemoved(const QModelIndex &parent, int first, int last)

この信号は、モデルから行が削除された後に発行されます。削除された項目は、指定された親の下の最初と最後の間の項目です。

この信号に接続されているコンポーネントは、モデル サイズの変更に対応するためにそれを使用します。

3.2. 非プライベート信号

1、void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>())

このシグナルは、既存の項目のデータが変更されるたびに発行されます。

項目が同じ親に属している場合、影響を受ける項目は、topLeft とbottomRight の間の項目です。項目の親が同じでない場合の動作は未定義です。

このシグナルは、setData() 関数を再実装するときに明示的に発行する必要があります。

ロールを使用して、実際に変更されるデータ ロールを指定できます。ロール内の要素の順序には関連性がありません。

2、void headerDataChanged(Qt::Orientation 方向性、int first、int last)

この信号は、タイトルが変更されるたびに出力されます。方向は、見出しが水平または垂直のどちらに変更されたかを示します。タイトルの最初から最後までの部分を更新する必要があります。

このシグナルは、setHeaderData() 関数を再実装するときに明示的に発行する必要があります。

列または行の数を変更する場合は、このシグナルを発行する必要はありません。

3、voidlayoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint ヒント = QAbstractItemModel::NoLayoutChangeHint)

この信号は、モデルのレイアウトが変更される前に発行されます。この信号に接続されているコンポーネントは、それを使用してモデルのレイアウトの変更に適応します。

サブクラスは、layoutAboutToBeChanged() の発行後に永続モデル インデックスを更新する必要があります。

親パラメータは、モデルのレイアウトのどの部分が変更されているかについて、より具体的な通知を提供するために使用されます。空のリストは、モデル全体のレイアウトが変更されたことを示します。リスト内の要素の順序は重要ではありません。ヒント パラメーターは、モデルが再レイアウトされたときに何が起こるかを示すために使用されます。

4、voidlayoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint ヒント = QAbstractItemModel::NoLayoutChangeHint)

このシグナルは、モデルによって公開される項目のレイアウトが変更されるたびに (たとえば、モデルが並べ替えられたとき) 発行されます。ビューがこのシグナルを受信すると、この変更を反映するために項目のレイアウトを更新する必要があります。

QAbstractItemModel または QAbstractProxyModel をサブクラス化する場合は、項目の順序を変更する前、またはビューに公開されるデータ構造を変更する前に必ずlayoutAboutToBeChanged()を発行し、レイアウトを変更した後にlayoutChanged()を発行してください。

親パラメータは、モデルのレイアウトのどの部分が変更されているかについて、より具体的な通知を提供するために使用されます。空のリストは、モデル全体のレイアウトが変更されたことを示します。リスト内の要素の順序は重要ではありません。ヒント パラメーターは、モデルが再レイアウトされたときに何が起こるかを示すために使用されます。

サブクラスは、layoutChanged() を発行する前に永続モデルのインデックスを更新する必要があります。

構造が変化すると、次のようになります。

layoutAboutToBeChanged() を発行する

変更される QModelIndex を覚えておいてください

内部データを更新する

changePersistentIndex() を呼び出す

放出レイアウトが変更されました

3.3、機能

1、voidresetInternalData()

内部データがクリアされた後、モデルがリセットされるときに呼び出されます。

2、void revert()

キャッシュされた情報を破棄する必要があることをモデルに知らせます。この機能は通常、行編集に使用されます。

3、bool submit()

キャッシュされた情報を永続ストレージにコミットする必要があることをモデルに知らせます。この機能は通常、行編集に使用されます。エラーがなかった場合は true を返します。

4、void beginInsertColumns(const QModelIndex &parent, int first, int last)

列の挿入操作を開始します。

サブクラスで insertColumns() を再実装する場合、データがモデルの基礎となるデータ ストアに挿入される前に、この関数を呼び出す必要があります。

parent は新しい列が挿入される親インデックスに対応し、最初と最後は新しい列が挿入された後の列番号です。

注: この関数は columnsAboutToBeInserted() シグナルを発行します。これは、接続されたビュー (またはプロキシ) がデータを挿入する前に処理する必要があります。そうしないと、ビューが無効な状態になる可能性があります。

beginInsertColumns(parent, 4, 6);

 

 

beginInsertColumns(parent, 6, 8);

 

 

5、void beginInsertRows(const QModelIndex &parent, int first, int last)

行挿入操作を開始します。

サブクラスで insertRows() を再実装する場合、データがモデルの基礎となるデータ ストアに挿入される前に、この関数を呼び出す必要があります。

parent は新しい行が挿入された親インデックスに対応し、最初と最後は新しい行が挿入された後の行番号です。

注: この関数は rowsAboutToBeInserted() シグナルを発行します。これは、接続されたビュー (またはプロキシ) がデータを挿入する前に処理する必要があります。そうしないと、ビューが無効な状態になる可能性があります。

beginInsertRows(parent, 2, 4);

 

beginInsertRows(parent, 4, 5);

 

 

6、bool beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)

列の移動操作を開始します。

サブクラスを再実装する場合、このメソッドにより、モデル内のエンティティを移動するプロセスが簡素化されます。beginMoveColumns() および endMoveColumns() を使用することは、layoutAboutToBeChanged() およびlayoutChanged() をchangePersistentIndex() で直接発行する代わりの方法です。

sourceParent インデックスは列の移動元の親に対応し、sourceFirst とsourceLast は移動する列の最初と最後の列番号です。destinationParent インデックスは、列の移動先の親に対応します。destinationChild は、列の移動先の列です。つまり、sourceParent の列 sourceFirst のインデックスは、destinationParent の列 destinationChild になり、その後、sourceLast までの他のすべての列になります。

ただし、列が同じ親内で下に移動される場合 (sourceParent と destinationParent が等しい)、列は destinationChild インデックスの前に配置されます。つまり、列 0 と 1 を移動して列 1 と 2 にする場合は、destinationChild を 3 にする必要があります。この場合、ソース列 i (sourceFirst と sourceLast の間) の新しいインデックスは (destinationChild-sourceLast-1+i) に等しくなります。

sourceParent と destinationParent が同じである場合、destinationChild が sourceFirst と sourceLast + 1 の範囲内にないことを確認する必要があることに注意してください。また、列をその子または祖先のいずれかに移動しようとしないようにする必要もあります。いずれかの条件が true の場合、このメソッドは false を返します。この場合、移動操作は中止されます。

7、bool beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)

行の移動操作を開始します。上記と同様です。

beginMoveRows(sourceParent, 2, 4, destinationParent, 2);

 

beginMoveRows(sourceParent, 2, 4, destinationParent, 6);

 

 

beginMoveRows(parent, 2, 2, parent, 0);

 

beginMoveRows(parent, 2, 2, parent, 4);

 

 

8、void beginRemoveColumns(const QModelIndex &parent, int first, int last)

カラムの取り外し操作を開始します。

サブクラスでremoveColumns()を再実装する場合、モデルの基礎となるデータ ストアからデータを削除する前に、この関数を呼び出す必要があります。

parent は新しい列の削除元の親インデックスに対応し、first と last は削除される最初と最後の列の列番号です。

注: この関数は columnsAboutToBeRemoved() 信号を発行します。この信号は、データが削除される前に、接続されたビュー (またはプロキシ) によって処理される必要があります。そうしないと、ビューが無効な状態になる可能性があります。

beginRemoveColumns(parent, 4, 6);

 

9、void beginRemoveRows(const QModelIndex &parent, int first, int last)

行の削除操作を開始します。

サブクラスでremoveRows()を再実装する場合、モデルの基礎となるデータ ストアからデータを削除する前に、この関数を呼び出す必要があります。

parent は新しい行を削除する親インデックスに対応し、最初と最後は削除する行の行番号です。

注: この関数は rowsAboutToBeRemoved() シグナルを発行します。データを削除するには、接続されたビュー (またはプロキシ) がこのシグナルを処理する必要があります。そうしないと、ビューが無効な状態になる可能性があります。

beginRemoveRows(parent, 2, 3);

 

10、void beginResetModel()

モデルのリセット操作を開始します。このモデルにアタッチされているビューもリセットされます。

この関数は、モデルまたはプロキシ モデルの内部データ構造をリセットする前に呼び出す必要があります。

この関数は、modelAboutToBeReset() に信号を送ります。

11、QModelIndex バディ(const QModelIndex &index)

インデックスで表されるアイテムのフレンド モデル インデックスを返します。

ユーザーが項目を編集したい場合、ビューはこの関数を呼び出して、モデル内の別の項目を編集する必要があるかどうかを確認します。次に、ビューは、パートナー アイテムによって返されたモデル インデックスを使用してデリゲートを構築します。

12、bool canDropMimeData(const QMimeData *data, Qt::DropAction アクション, int row, int columns, const QModelIndex &parent)

モデルがドラッグ データを受け入れることができる場合は true を返します。

13、[呼び出し可能] bool canFetchMore(const QModelIndex &parent)

親に利用可能なデータがさらにある場合は true を返します。デフォルトの実装は常に false を返します。

canFetchMore() が true を返した場合は、 fetchMore() 関数を呼び出す必要があります。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

14、bool checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions オプション = CheckIndexOption::NoOption)

この関数は、インデックスがこのモデルの有効なモデル インデックスであることを確認します。

有効なモデル インデックスは、無効なモデル インデックス、または次の条件をすべて満たす有効なモデル インデックスのいずれかです。

  • インデックスモデルはこちら
  • インデックス付きの行はゼロ以上です
  • インデックスが付けられた行の数が、インデックスが付けられた親の行数よりも少ないです
  • インデックス付きの列がゼロ以上です
  • インデックスが作成された列の数が、インデックスが作成された親の列の数よりも少ないです

options パラメータは検査オプションを設定します。

  • オプションに IndexIsValid が含まれる場合、インデックスは有効なインデックスである必要があります。
  • オプションに DoNotUseParent が含まれている場合、parent() を呼び出すためのチェックは省略されます。これにより、parent() の再実装内からこの関数を呼び出すことができます (そうしないと、無限再帰とクラッシュが発生します)。
  • オプションに DoNotUseParent が含まれておらず、ParentIsInvalid が含まれている場合は、親インデックスが無効かどうかを確認するために追加のチェックが実行されます。

15、bool ClearItemData(const QModelIndex &index)

指定されたインデックスにあるすべてのロールに保存されているデータを削除します。成功した場合は true を返します。データが正常に削除された場合は、dataChanged() シグナルが発行されるはずです。

16 [呼び出し可能] int columnCount(const QModelIndex &parent = QModelIndex())

指定された親の子の列数を返します。ほとんどのサブクラスでは、列の数は親クラスから独立しています。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

17、QModelIndex createIndex(int row, int column, const void *ptr = nullptr)

内部ポインタ ptr を使用して、指定された行と列のモデル インデックスを作成します。

QSortFilterProxyModel を使用する場合、そのインデックスには独自の内部ポインターがあります。モデルの外部からこの内部ポインターにアクセスすることはお勧めできません。代わりに data() 関数を使用してください。

この関数は、モデル サブクラスがモデル インデックスを作成するために使用する必要がある一貫したインターフェイスを提供します。

18 [呼び出し可能] QVariant データ(const QModelIndex &index, int role = Qt::DisplayRole)

インデックスによって参照される項目の指定されたロールの下に格納されているデータを返します。

返す値がない場合は、0 の代わりに void QVariant を返します。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

19、bool dropMimeData(const QMimeData *data, Qt::DropAction アクション, int row, int columns, const QModelIndex &parent)

ドラッグ アンド ドロップ データを処理します。

指定された行、列、親は、操作が終了したモデル内の項目の位置を示します。正しい位置でアクションを完了するのはモデルの責任です。

mimeTypes() メンバーを呼び出して、受け入れ可能な MIME タイプのリストを取得します。このデフォルト実装は、単一のデフォルト MIME タイプを返す mimeTypes() のデフォルト実装を前提としています。カスタム モデルで mimeTypes() を再実装して複数の MIME タイプを返す場合、それらを使用するにはこの関数を再実装する必要があります。

20、void endInsertColumns()

列の挿入操作を終了します。サブクラスで insertColumns() を再実装する場合、モデルの基礎となるデータ ストアにデータが挿入された後にこの関数を呼び出す必要があります。

21、void endInsertRows()

行挿入操作を終了します。サブクラスで insertRows() を再実装する場合、モデルの基礎となるデータ ストアにデータが挿入された後にこの関数を呼び出す必要があります。

22、void endMoveColumns()

列の移動操作を終了します。サブクラス化する場合、データがモデルの基礎となるデータ ストアに移動された後にこの関数を呼び出す必要があります。

23、void endMoveRows()

行の移動操作を終了します。サブクラス化する場合、データがモデルの基礎となるデータ ストアに移動された後にこの関数を呼び出す必要があります。

24、void endRemoveColumns()

カラムの削除操作を終了します。サブクラスでremoveColumns()を再実装する場合、モデルの基礎となるデータ ストアからデータが削除された後にこの関数を呼び出す必要があります。

25、void endRemoveRows()

行の削除操作を終了します。サブクラスでremoveRows()を再実装する場合、モデルの基礎となるデータ ストアからデータが削除された後にこの関数を呼び出す必要があります。

26、void endResetModel()

モデルのリセット操作を完了します。この関数は、モデルまたはプロキシ モデルの内部データ構造をリセットした後に呼び出す必要があります。この関数は、modelReset() に信号を送ります。

27、[呼び出し可能] void fetchMore(const QModelIndex &parent)

親インデックスで指定された親を持つ項目で使用可能なデータを取得します。モデルが段階的に設定される場合は、再実装する必要があります。

デフォルトの実装では何も行われません。この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

28、[呼び出し可能] Qt::ItemFlags フラグ(const QModelIndex &index)

指定されたインデックスの項目フラグを返します。

基本クラスの実装は、項目を有効にする (ItemIsEnabled) および項目の選択を許可する (ItemIsSelectable) フラグの組み合わせを返します。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

29、[呼び出し可能] bool hasChildren(const QModelIndex &parent = QModelIndex())

親に子供がいるかどうか。同じインデックスに対してフラグ Qt::ItemNeverHasChildren が設定されている場合、この関数を呼び出すと未定義の動作が生成されます。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

30、[呼び出し可能] bool hasIndex(int row, int column, const QModelIndex &parent = QModelIndex())

モデルが親を持つ行と列に対して有効な QModelIndex を返す場合は true を返します。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

31、[呼び出し可能] QVariant headerData(int セクション、Qt::Orientation 方向、int 役割 = Qt::DisplayRole)

ヘッダー内の指定されたロールとセクションのデータを、指定された方向で返します。横見出しの場合、セクション番号は列番号に対応します。同様に、垂直見出しの場合、セクション番号は行番号に対応します。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

32、[呼び出し可能] QModelIndex インデックス(int 行, int 列, const QModelIndex &parent = QModelIndex())

指定された行、列、および親のインデックスで指定されたモデル内の項目のインデックスを返します。

この関数をサブクラスで再実装する場合は、createIndex() を呼び出して、他のコンポーネントがモデル内の項目を参照するために使用できるモデル インデックスを生成します。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

33、bool insertColumn(int 列, const QModelIndex &parent = QModelIndex())

指定された親の子の指定された列の前に 1 つの列を挿入します。列が正常に挿入された場合は true を返します。実際には insertColumns() を呼び出しています。

34、bool insertColumns(int 列, int カウント, const QModelIndex &parent = QModelIndex())

この機能をサポートするモデルでは、モデル内の指定された列の前に count の新しい列を挿入します。新しい各列の項目は、親モデルのインデックスで表される項目の子になります。

35、bool insertRow(int row, const QModelIndex &parent = QModelIndex())

bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex())

上記と同様に行を挿入します。

36、QMap<int, QVariant> itemData(const QModelIndex &index)

インデックスにある項目のモデル内のすべての事前定義されたロールの値を含むマップを返します。

37、[呼び出し可能] QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hit = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap))

指定されたロールの下に格納されているデータがロールと一致する、開始インデックス列内の項目のインデックス付きリストを返します。検索の実行方法はフラグによって定義されます。

リスト内の結果の順序は、モデル内の順序と一致しない場合があります。

デフォルトでは、この関数はすべての項目の文字列ベースの改行比較を実行し、値で指定された検索語で始まる項目を検索します。

この関数のデフォルトの実装では、列のみが検索されます。この関数を再実装して、異なる検索動作を含めます。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

enum Qt::MatchFlag: この列挙型は、モデル内の項目を検索するときに使用できる一致タイプを記述します。

  • Qt::MatchExactly: QVariant ベースのマッチングを実行します。
  • Qt::MatchFixedString: 文字列ベースのマッチング。MatchCaseSensitive フラグも指定されていない限り、文字列ベースの比較では大文字と小文字が区別されません。
  • Qt::MatchContains: 検索語が項目に含まれています。
  • Qt::MatchStartsWith: 検索語の先頭が一致します。
  • Qt::MatchEndsWith: 検索語の末尾が一致します。
  • Qt::MatchCaseSensitive: 検索では大文字と小文字が区別されます。
  • Qt::Match RegularExpression: 正規表現を検索語として使用して、文字列ベースのマッチングを実行します。
  • Qt::MatchWildcard: 検索語としてワイルドカードを含む文字列を使用して、文字列ベースのマッチングを実行します。
  • Qt::MatchWrap: ラップアラウンド検索を実行します。これにより、検索がモデル内の最後の項目に到達すると、最初の項目から再度開始され、すべての項目がチェックされるまで続行されます。
  • Qt::MatchRecursive: 階層全体を検索します。

38、QMimeData * mimeData(const QModelIndexList &indexes)

指定されたインデックスのリストに対応するシリアル化されたデータ項目を含むオブジェクトを返します。エンコードされたデータの記述に使用される形式は、mimeTypes() 関数から取得されます。このデフォルトの実装では、mimeTypes() のデフォルトの実装によって返されるデフォルトの MIME タイプが使用されます。

39、QStringList mimeTypes()

許可された MIME タイプのリストを返します。デフォルトでは、組み込みモデルとビューは内部 MIME タイプ application/x-qabstractitemmodeldatalist を使用します。

カスタム モデルでドラッグ アンド ドロップのサポートを実装するときに、データがデフォルトの内部 MIME タイプ以外の形式で返される場合は、この関数を再実装して MIME タイプのリストを返します。

この関数をカスタム モデルで再実装する場合は、それを呼び出すメンバー関数 mimeData() および dropMimeData() も再実装する必要があります。

40、bool moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild)

この機能をサポートするモデルでは、sourceColumn を sourceParent から destinationParent の下の destinationChild に移動します。

列が正常に移動された場合は true を返します。

41、bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild)

この機能をサポートするモデルでは、親sourceParentの下の指定されたsourceColumnで始まる列を、親destinationParentの下の列destinationChildに移動します。

列が正常に移動された場合は true を返します。

42、bool moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild)

bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild)

行を移動します。同上。

43、void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan)

指定されたインデックスに対して要求されたデータを roleDataSpan に設定します。

44、[呼び出し可能] QModelIndex 親(const QModelIndex &index)

指定されたインデックスを持つモデル項目の親を返します。項目に親がない場合は、無効な QModelIndex を返します。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

45、QModelIndexListpersistentIndexList()

モデルに永続インデックスとして保存されているインデックスのリストを返します。

46、bool deleteColumn(int 列, const QModelIndex &parent = QModelIndex())

指定された親の子から指定された列を削除します。列が削除された場合は true を返します。実際にremoveColumns()を呼び出します。

47、bool deleteColumns(int 列, int カウント, const QModelIndex &parent = QModelIndex())

この機能をサポートするモデルでは、親の下の指定された列で始まるカウント列をモデルから削除します。列が正常に削除された場合は true を返します。

48、bool RemoveRow(int row, const QModelIndex &parent = QModelIndex())

bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex())

上記と同様に、行を削除します。

49、QHash<int, QByteArray> roleNames()

モデルのロール名を返します。

Qt によって設定されるデフォルトのロール名は次のとおりです。

  • Qt::DisplayRole:表示
  • Qt::Decoration役割:装飾
  • Qt::Edit役割:編集
  • Qt::ToolTipRole:ツールチップ
  • Qt::StatusTipRole:ステータスヒント
  • Qt::WhatsThis役割:WhatsThis

50 [呼び出し可能] int rowCount(const QModelIndex &parent = QModelIndex())

指定された親の下の行数を返します。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

51、[呼び出し可能] bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)

インデックスにある項目のロール データを設定します。成功した場合は true を返します。データが正常に設定された場合は、dataChanged() シグナルが発行されるはずです。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

52、bool setHeaderData(int セクション、Qt::Orientation 方向、const QVariant &value、int role = Qt::EditRole)

ヘッダーの値を設定します。ヘッダーのデータが更新された場合は true を返します。

この関数を再実装する場合は、headerDataChanged() を明示的に通知する必要があります。

53、bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)

Qt::ItemDataRole ごとに、インデックスにある項目のロール データをロール内の関連する値に設定します。ロール内にないロールは変更されません。

54、[呼び出し可能] QModelIndex 兄弟(int row, int column, const QModelIndex &index)

インデックスにある項目の行と列の兄弟を返します。その位置に兄弟がない場合は無効な QModelIndex を返します。

この関数はメタオブジェクト システムと QML を通じて呼び出すことができます。

55、void sort(int 列, Qt::SortOrder order = Qt::AscendingOrder)

指定された順序で列ごとにモデルを並べ替えます。

enum Qt::SortOrder: この列挙は、ウィジェット内の項目がどのようにソートされるかを説明します。

  • Qt::AscendingOrder: 昇順で並べ替えます。たとえば、Latin-1 ロケールでは「AAA」で始まり「ZZZ」で終わります。
  • Qt::DescendingOrder: 降順で並べ替えます。たとえば、Latin-1 ロケールでは「ZZZ」で始まり「AAA」で終わります。

56、Qサイズスパン(const QModelIndex &index)

インデックスで表される項目の行と列のスパンを返します。

57、Qt::DropActionsサポートDragActions()

このモデルのデータでサポートされている操作を返します。

58、Qt::DropActions のサポートDropActions()

このモデルでサポートされているドロップ操作を返します。

デフォルトの実装は Qt::CopyAction を返します。他の操作をサポートしたい場合は、この関数を再実装する必要があります。追加操作を処理するには、dropMimeData() 関数も再実装する必要があります。

この記事の利点は、Qt 開発学習教材パッケージ、技術ビデオ (C++ 言語基礎、Qt プログラミング入門、QT シグナルおよびスロット メカニズム、QT インターフェイス開発イメージ描画、QT ネットワーク、QT データベース プログラミング、 QTプロジェクトコンバット、QT組込み開発、Quickモジュール等) ↓↓↓↓下記参照↓↓料金受け取りは記事下部をクリック↓↓

QAbstractItemView

1. 説明

QAbstractItemView クラスは、QAbstractItemModel を使用するすべての標準ビューの基本クラスです。QAbstractItemView は抽象クラスなので、それ自体をインスタンス化することはできません。これは、シグナルとスロットのメカニズムを通じてモデルと相互運用するための標準インターフェイスを提供し、サブクラスがモデルの変更を最新の状態に保つことができるようにします。このクラスは、キーボードとマウスのナビゲーション、ビューポートのスクロール、項目の編集と選択の標準サポートを提供します。キーボード ナビゲーションは次の機能を実装します。

矢印キーで現在の項目を変更し、選択します。

  • Ctrl 矢印キーを押すと、現在の項目を選択せず​​に変更します。
  • Shift+矢印キー 現在の項目を変更して選択します。
  • Ctr+Space 現在の項目の選択を切り替えます。
  • タブ/戻るタブは、現在の項目を次の/前の項目に変更します。
  • Home/End モデル内の最初/最後の項目を選択します。
  • Page up/Page down ビュー内で表示されている行の数だけ、表示されている行を上下にスクロールします。
  • Ctrl+A モデル内のすべての項目を選択します。

上記の操作は、選択モードが操作を許可していることを前提としています。たとえば、選択モードが QAbstractItemView::NoSelection の場合、項目は選択できません。

QAbstractItemView から継承し、ビューポートのコンテンツを更新する場合は、すべての描画操作がビューポート上で実行されるため、update() の代わりに viewport->update() を使用する必要があります。

2、型メンバー

1. enum QAbstractItemView::CursorAction: この列挙は、項目間を移動するさまざまな方法を説明します。

  • MoveUp: 現在の項目の上の項目に移動します。
  • MoveDown: 現在の項目の下の項目に移動します。
  • MoveLeft: 現在の項目の左に移動します。
  • MoveRight: 現在の項目の右に移動します。
  • MoveHome: 左上の項目に移動します。
  • MoveEnd: 右下の項目に移動します。
  • MovePageUp: 現在の項目の 1 ページ上に移動します。
  • MovePageDown: 現在の項目の 1 ページ下に移動します。
  • MoveNext: 現在の項目の後の項目に移動します。
  • MovePrevious: 現在の項目の前の項目に移動します。

2. enum QAbstractItemView::DragDropMode: ビューが操作できるさまざまなドラッグ アンド ドロップ イベントを記述します。デフォルトでは、ビューはドラッグ アンド ドロップ (NoDragDrop) をサポートしません。(使用するモデルはドラッグ アンド ドロップ操作をサポートする必要があることに注意してください)

  • NoDragDrop: ドラッグ アンド ドロップはサポートされていません。
  • DragOnly: ビューは、それ自体のドラッグをサポートする項目のみを受け入れます。
  • DropOnly: ビューはドロップのみをサポートします
  • DragDrop: ビューはドラッグ アンド ドロップの両方をサポートします
  • InternalMove: ビューは、ビュー自体からの移動 (コピーではなく) 操作のみを受け入れます。

3. enum QAbstractItemView::DropIndicatorPosition: この列挙は、現在のマウス位置のインデックスに対するドロップ インジケーターの位置を示します。

  • OnItem: 項目はインデックス上にドラッグ アンド ドロップされます。
  • AboveItem: 項目はインデックスの上にドラッグ アンド ドロップされます。
  • BelowItem: 項目はインデックスの下にドラッグ アンド ドロップされます
  • OnViewport: 項目は、項目のないビューポート領域にドラッグ アンド ドロップされます。

4. enum QAbstractItemView::EditTrigger: この列挙は、アイテムの編集を開始する操作を記述します。

  • NoEditTriggers: 編集できません。
  • CurrentChanged: 現在の項目が変更されるたびに編集を開始します。
  • DoubleClicked: 項目をダブルクリックすると編集が開始されます。
  • SelectedClicked: 選択した項目をクリックすると編集が開始されます。
  • EditKeyPressed: アイテム上でプラットフォーム編集キーが押されると編集が開始されます。
  • AnyKeyPressed: アイテム上でいずれかのキーが押されると編集を開始します。
  • AllEditTriggers: 上記のすべてのアクションが編集を開始します。

5、列挙型 QAbstractItemView::ScrollHint

  • EnsureVisible: スクロールして項目が表示されていることを確認します。
  • PositionAtTop: スクロールして項目をビューポートの上部に配置します。
  • PositionAtBottom: スクロールして項目をビューポートの下部に配置します。
  • PositionAtCenter: スクロールしてアイテムをビューポートの中心に配置します。

6. enum QAbstractItemView::ScrollMode: スクロール バーの動作を記述します。スクロール モードが ScrollPerPixel に設定されている場合、setSingleStep() で明示的に設定しない限り、単一ステップ サイズは自動的に調整されます。自動スケールは、単一ステップ サイズを -1 に設定することで復元できます。

  • ScrollPerItem: ビューは一度に 1 項目ずつスクロールします。
  • ScrollPerPixel: ビューはコンテンツを一度に 1 ピクセルずつスクロールします。

7、列挙型QAbstractItemView::SelectionBehavior:

SelectItems:选择单个项目
SelectRows:只选择行
SelectColumns:只选择列

8. enum QAbstractItemView::SelectionMode: この列挙は、ビューがユーザーの選択にどのように応答するかを示します。最も一般的に使用されるモードは、SingleSelection と ExtendedSelection です。

SingleSelection: 単一の選択。Ctrl キーを押しながら選択した項目をクリックすると、項目の選択が解除されます。

ContiguousSelection: ラジオを押します。ただし、Shift キーを押しながら項目をクリックすると、クリックした項目の状態に応じて、現在の項目とクリックした項目の間のすべての項目がオンまたはオフになります。

ExtendedSelection: ラジオを押します。ただし、Ctrl キーを押したまま項目をクリックすると、クリックした項目が切り替わり、他のすべての項目は変更されません。Shift キーを押したまま項目をクリックすると、クリックした項目の状態に応じて、現在の項目とクリックした項目の間のすべての項目がオンまたはオフになります。マウスを上にドラッグすることで複数の項目を選択できます

  • MultiSelection: 複数選択
  • NoSelection: 項目を選択できません

9. enum QAbstractItemView::State: ビューが取り得るさまざまな状態を説明します。通常、ビューを再実装する場合にのみ使用されます。

  • NoState: デフォルトの状態
  • DraggingState: ユーザーが項目をドラッグしています
  • DragSelectingState: ユーザーが項目を選択しています
  • EditingState: ユーザーがウィジェット エディターで項目を編集中です。
  • ExpandingState; ユーザーがプロジェクトのブランチを開いている
  • CollapsingState: ユーザーがプロジェクトのブランチを閉じています。
  • AnimatingState: 項目ビューはアニメーション化されています

3、属性メンバー

1、alternatingRowColors : bool

このプロパティは、背景を交互の色で描画するかどうかを保持します。デフォルトは false です。

このプロパティが true の場合、項目の背景は QPalette::Base および QPalette::AlternateBase を使用して描画されます; それ以外の場合、背景は QPalette::Base カラーを使用して描画されます。

2、autoScroll : bool

このプロパティは、ドラッグ移動イベントの自動スクロールが有効かどうかを保持します。デフォルトは true です。

このプロパティが true に設定されている場合、ユーザーがビューポートの端から 16 ピクセル以内にドラッグすると、QAbstractItemView はビューのコンテンツを自動的にスクロールします。現在の項目が変更されると、ビューが自動的にスクロールして、現在の項目が完全に表示されるようになります。

このプロパティは、ビューポートがドロップを受け入れる場合にのみ有効です。

3、autoScrollMargin : int

このプロパティは、自動スクロールがトリガーされたときの領域のサイズを保持します。デフォルトは 16 ピクセルです。

4、デフォルトのDropAction : Qt::DropAction

このプロパティは、drag() でデフォルトで使用されるドロップ アクションを保持します。

このプロパティが設定されていない場合、サポートされているアクションが CopyAction をサポートしている場合、put アクションは CopyAction になります。

enum Qt::DropAction:

  • Qt::CopyAction: データをターゲットにコピーします
  • Qt::MoveAction: ソースからターゲットにデータを移動します
  • Qt::LinkAction: ソースからターゲットへのリンクを作成します
  • Qt::アクションマスク
  • Qt::IgnoreAction: データを何も処理しません
  • Qt::TargetMoveAction: Windows では、この値は、ドラッグされたデータの所有権をターゲット アプリケーションが引き継ぐ必要がある場合、つまりソース アプリケーションがデータを削除すべきでない場合に使用されます。X11 では、この値は移動に使用されます。TargetMoveAction は Mac では使用されません。

5、ドラッグドロップモード : ドラッグドロップモード

このプロパティは、ビューのドラッグ モードを保持します。

6、dragDropOverwriteMode : bool

このプロパティは、ビューのドラッグ アンド ドロップ動作を保持します。

true の場合、チェックされたデータはドロップされたときに既存のアイテム データを上書きし、データを移動するとアイテムがクリアされます。

false の場合、データが削除されると、選択したデータが新しい項目として挿入されます。データを移動すると項目も削除されます。

7、dragEnabled : bool

このプロパティは、ビューが独自の項目のドラッグをサポートするかどうかを保持します。

8、editTriggers : 編集トリガー

このプロパティは、どのアクションがアイテムの編集を開始するかを保持します。

このプロパティは、EditTrigger によって定義されたフラグの選択であり、OR 演算子を使用して結合されます。

9、horizo​​ntalScrollMode : スクロールモード

このプロパティは、ビューがコンテンツを水平方向にスクロールする方法を制御します。スクロールはピクセル単位または項目単位で実行できます。

そのデフォルト値は、 QStyle::SH_ItemView_ScrollMode を介してヒントされたスタイルから取得されます (スタイルによって指定されるデフォルトの垂直および水平スクロール モード。 QAbstractItemView::setVerticalScrollMode() および QAbstractItemView::set水平ScrollMode() でオーバーライドできます)。

10、アイコンサイズ : Qサイズ

このプロパティは、項目アイコンのサイズを保持します。

ビューが表示されているときにこのプロパティを設定すると、項目が再度レイアウトされます。

11、選択動作 : 選択動作

このプロパティは、ビューで使用される選択動作を保持します。

12、selectionMode : 選択モード

このプロパティは、ビューがどの選択モードで動作しているかを保持します。

1 つ以上の項目を選択できるかどうか、また複数項目を選択する場合は、連続した範囲の項目を選択する必要があるかどうか。

13、showDropIndicator : bool

このプロパティは、項目をドラッグ アンド ドロップするときにドロップ インジケーターを表示するかどうかを保持します。

14、tabKeyNavigation : bool

このプロパティは、タブとバックタブを使用した項目ナビゲーションが有効かどうかを保持します。

15、textElideMode : Qt::TextElideMode

このプロパティは、省略されたテキスト内の「...」の位置を保持します。

すべての項目ビューのデフォルトは Qt::ElideRight です。

enum Qt::TextElideMode: この列挙は、不適切なテキストを表示するときに省略記号を表示する場所を指定します。

  • Qt::ElideLeft: テキストの先頭
  • Qt::ElideRight: テキストの終わり
  • Qt::ElideMiddle: テキストの中央
  • Qt::ElideNone: 省略記号をテキストに含めるべきではありません

16、verticalScrollMode : スクロールモード

ビューがコンテンツを垂直方向にスクロールする方法。項目9と同様。

4. メンバー関数

4.1. 信号

1、void アクティブ化(const QModelIndex &index)

この信号は、ユーザーがインデックスで指定された項目をアクティブ化したときに発行されます。

2、voidクリック(const QModelIndex &index)

この信号は、マウスの左ボタンがクリックされたときに出力されます。マウスでクリックした項目をインデックスで指定します。この信号は、インデックスが有効な場合にのみ発行されます。

3、void doubleClicked(const QModelIndex &index)

この信号は、マウス ボタンがダブルクリックされたときに出力されます。マウスがダブルクリックした項目はインデックスで指定されます。この信号は、インデックスが有効な場合にのみ発行されます。

4、空白が入力されました(const QModelIndex &index)

この信号は、マウス カーソルがインデックスで指定された項目に入ったときに発行されます。この機能を使用するには、マウス追跡を有効にする必要があります。

5、voidが押されました(const QModelIndex &index)

この信号は、マウス ボタンが押されたときに出力されます。マウスが押された項目はインデックスで指定されます。この信号は、インデックスが有効な場合にのみ発行されます。

QGuiApplication::mouseButtons() 関数を使用して、マウス ボタンの状態を取得します。

6、void viewportEntered()

この信号は、マウス カーソルがビューポートに入ると発生します。この機能を使用するには、マウス追跡を有効にする必要があります。

4.2、機能

1、void clearSelection()

選択されているすべての項目の選択を解除します。現在のインデックスは変更されません。

2、void closeEditor(QWidget *エディター、QAbstractItemDelegate::EndEditHint ヒント)

指定されたエディタを閉じてから解放します。ヒントは、編集操作の終了にビューがどのように応答するかを指定するために使用されます。(代表団向け)

3、void commitData(QWidget *エディタ)

エディター内のデータをモデルにコミットします。(代表団向け)

4、void currentChanged(const QModelIndex ¤t, const QModelIndex &previous)

このスロットは、現在のインデックスが変更されたときに呼び出されます。

5、void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>())

このスロットは、モデル内の特定の役割を持つ項目が変更されるときに呼び出されます。変化する項目は左上から右下です。

注: dataChanged() は Qt::ToolTipRole をサポートしていません。

6、void edit(const QModelIndex &index)

編集可能な場合は、指定されたインデックスに対応する項目の編集を開始します。

7、void editorDestroyed(QObject *エディタ)

この関数は、指定されたエディターが破棄されるときに呼び出されます。(代表団向け)

8、ボイドリセット()

ビューの内部状態をリセットします。

9、void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)

このスロットは、行が削除されようとしているときに呼び出されます。削除される行は、親項目の最初から最後までの行です。

10、void rowsInserted(const QModelIndex &parent, int start, int end)

同様に列を削除します。

11、voidscrollToBottom() / voidscrollToTop()

ビューを下/上にスクロールします。

12、void selectAll()

ビュー内のすべての項目を選択します。

13、voidselectionChanged(const QItemSelection &selected, const QItemSelection &deselected)

このスロットは、選択が変更されたときに呼び出されます。以前の選択範囲 (空の場合もあります) は deselected で指定され、新しい選択範囲は selected で指定されます。

14、void setCurrentIndex(const QModelIndex &index)

現在の項目をインデックスの項目に設定します。

現在の選択モードが NoSelection でない限り、項目も選択されます。

項目を選択せず​​に現在の項目として設定するには、次のように呼び出します。

selectionModel()->setCurrentIndex(index, QItemSelectionModel::NoUpdate);

15、void setRootIndex(const QModelIndex &index)

ルートプロジェクトを設定します。

16、void update(const QModelIndex &index)

指定されたインデックスが占める領域を更新します。

17、void updateGeometry()

ビューのサブウィジェットのジオメトリを更新します。

18、void closePersistentEditor(const QModelIndex &index)

指定されたインデックスにある項目の永続エディターを閉じます。

19、QModelIndex currentIndex()

現在のプロジェクトのモデル インデックスを返します。

20、voidragEnterEvent(QDragEnterEvent *event)

void dragLeaveEvent(QDragLeaveEvent *event)
void dragMoveEvent(QDragMoveEvent *event)
void dropEvent(QDropEvent *event)

関連するイベントをドラッグします。Qt のドラッグ アンド ドロップ。

21、int 水平オフセット() / 垂直オフセット()

ビューの水平/垂直オフセットを返します。

22、QModelIndexindexAt(const QPoint&point)

ビューポート座標点におけるアイテムのモデル インデックスを返します。

23、QWidget *indexWidget(const QModelIndex &index)

指定されたインデックスにある項目のウィジェットを返します。

24、void initViewItemOption(QStyleOptionViewItem *オプション)

ビューのパレット、フォント、状態、配置などを使用してオプション構造を初期化します。

25、bool isIndexHidden(const QModelIndex &index)

指定されたインデックスによって参照される項目がビューから非表示になっている場合は true を返します。

非表示はビュー固有の機能です。たとえば、TableView では列を非表示としてマークしたり、TreeView では行を非表示としてマークしたりできます。

26、bool isPersistentEditorOpen(const QModelIndex &index)

インデックス Index にある項目に対して永続エディターが開かれているかどうかを返します。

27、QAbstractItemDelegate * itemDelegate() / void setItemDelegate(QAbstractItemDelegate *delegate)

QAbstractItemView はデリゲートの所有権を取得しません。

警告: ビュー間で同じデリゲート インスタンスを共有しないでください。これを行うと、特定のデリゲートに接続されているすべてのビューが closeEditor() シグナルを受け取り、閉じたエディターにアクセス、変更、または閉じようとする可能性があるため、編集動作が不正確または直感的ではなくなる可能性があります。

28、QAbstractItemDelegate * itemDelegateForColumn(int 列)

void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate)

指定された列のこのビューおよびモデルで使用される指定された項目デリゲートを設定します。

列上のすべての項目は、デフォルトのデリゲート (つまり itemDelegate()) を使用する代わりに、デリゲートによって描画および管理されます。

29、void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate)

QAbstractItemDelegate * itemDelegateForRow(int row)

上記と同様に、OK。

30、QAbstractItemDelegate * itemDelegateForIndex(const QModelIndex &index)

指定されたインデックスに対してこのビューとモデルで使用される項目デリゲートを返します。

31、voidkeyboardSearch(const QString &search)

文字列に最も一致する項目に移動して選択します。

32、void openPersistentEditor(const QModelIndex &index)

指定されたインデックスにある項目で永続エディタを開きます。エディターが存在しない場合、デリゲートは新しいエディターを作成します。

33、QModelIndex rootIndex()

モデルのルート項目のモデル インデックスを返します。ルート項目は、ビューの最上位項目の親です。ルートが有効ではない可能性があります。

34、voidscheduleDelayedItemsLayout()

イベント処理の開始時に実行されるように、ビュー内の項目のレイアウトを調整します。

イベントを処理する前に、scheduleDelayedItemsLayout() が複数回呼び出された場合でも、ビューは 1 回だけレイアウトされます。

35、voidscrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint ヒント = EnsureVisible)

必要に応じて、ビューをスクロールして、インデックスにある項目が表示されていることを確認します。ビューは、指定されたヒントに基づいて項目を配置しようとします。

36、QModelIndexList selectedIndexes()

この便利な関数は、ビュー内で選択されているすべての非表示でない項目インデックスのリストを返します。リストには重複が含まれておらず、並べ替えられていません。

37、QItemSelectionModel::SelectionFlagsselectionCommand(const QModelIndex &index, const QEvent *event = nullptr)

指定されたインデックスを含むように選択範囲を更新するときに使用する SelectionFlags を返します。イベントは、マウスやキーボードのイベントなどのユーザー入力イベントです。

38、QItemSelectionModel *selectionModel()

現在選択されているモデルを返します。

39、void setIndexWidget(const QModelIndex &index, QWidget *ウィジェット)

指定されたインデックスの項目に指定されたウィジェットを設定し、ウィジェットの所有権をビューポートに渡します。

特定のウィジェットの autoFillBackground プロパティは true に設定する必要があります。そうでない場合、ウィジェットの背景は透明になり、モデル データと特定のインデックスの項目の両方が表示されます。

インデックス部品 A をインデックス部品 B に置き換えると、インデックス部品 A は削除されます。

この関数は、データ項目に対応する表示領域内に静的コンテンツを表示する場合にのみ使用してください。カスタムの動的コンテンツを表示する場合、またはカスタム エディター ウィジェットを実装する場合は、代わりに委任 (QStyledItemDelegate) する必要があります。

40、void setModel(QAbstractItemModel *モデル)

レンダリングするビューのモデルを設定します。

この関数は、新しい選択モデルを作成して設定し、以前に setSelectionModel() で設定されたモデルを置き換えます。ただし、古い選択モデルは複数のビュー間で共有される可能性があるため、削除されません。古い選択モデルが不要になった場合は、手動で削除する必要があります。

QItemSelectionModel *m = view->selectionModel();
view->setModel(new model);
delete m;

古いモデルにも古い選択モデルにも親がない場合、またはそれらの親が長期間存続するオブジェクトである場合は、それらの deleteLater() 関数を呼び出して明示的に削除することをお勧めします。

モデルは多くの異なるビュー間で共有される可能性があるため、ビューはモデルの親でない限り、モデルの所有権を取得しません。

41、void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags フラグ)

選択フラグを四角形の四角形内または四角形の四角形に接触しているアイテムに適用します。

42、void setSelectionModel(QItemSelectionModel *selectionModel)

選択モデルを設定します。

43、int sizeHintForColumn(int 列) / int sizeHintForRow(int 行)

指定された列の幅/高さのサイズのヒントを返します。(項目の最大の高さ/幅) (行の高さを制御するには、QAbstractItemDelegate::sizeHint() 関数を再実装する必要があります。)

44、QSize sizeHintForIndex(const QModelIndex &index)

指定されたインデックスを持つ項目のサイズのヒントを返します。

45、void startDrag(Qt::DropActionssupportedActions)

指定されたsupportedActionsを指定してdrag->exec()を呼び出してドラッグを開始します。

46、QRect VisualRect(const QModelIndex &index)

インデックスの項目が占めるビューポート上の四角形を返します。

47、QRegion VisualRegionForSelection(const QItemSelection &selection) const

指定された選択範囲内の項目のビューポートから領域を返します。

この記事の利点は、Qt 開発学習教材パッケージ、技術ビデオ (C++ 言語基礎、Qt プログラミング入門、QT シグナルおよびスロット メカニズム、QT インターフェイス開発イメージ描画、QT ネットワーク、QT データベース プログラミング、 QTプロジェクトコンバット、QT組込み開発、Quickモジュール等) ↓↓↓↓下記参照↓↓料金受け取りは記事下部をクリック↓↓

元のリンク: https://blog.csdn.net/kenfan1647/article/details/119277723

おすすめ

転載: blog.csdn.net/hw5230/article/details/131987274