このページでは

QAbstractItemModel Class

QAbstractItemModel クラスは、アイテムモデルクラス向けの抽象インターフェースを提供します。詳細...

ヘッダー: #include <QAbstractItemModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承元: QObject
継承元:
10 つの型

QAbstractItemModelReplica、QAbstractListModel 、QAbstractProxyModel 、QAbstractTableModel 、QConcatenateTablesProxyModel 、QFileSystemModel 、QHelpContentModel 、QPdfBookmarkModel 、QRangeModel 、およびQStandardItemModel

パブリック型

enum class CheckIndexOption { NoOption, IndexIsValid, DoNotUseParent, ParentIsInvalid }
flags CheckIndexOptions
enum LayoutChangeHint { NoLayoutChangeHint, VerticalSortHint, HorizontalSortHint }

パブリック関数

QAbstractItemModel(QObject *parent = nullptr)
virtual ~QAbstractItemModel()
virtual QModelIndex buddy(const QModelIndex &index) const
virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
virtual bool canFetchMore(const QModelIndex &parent) const
bool checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const
(since 6.0) virtual bool clearItemData(const QModelIndex &index)
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
virtual void fetchMore(const QModelIndex &parent)
virtual Qt::ItemFlags flags(const QModelIndex &index) const
virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const
bool hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0
bool insertColumn(int column, const QModelIndex &parent = QModelIndex())
virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
bool insertRow(int row, const QModelIndex &parent = QModelIndex())
virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
virtual QMap<int, QVariant> itemData(const QModelIndex &index) const
virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const
virtual QMimeData *mimeData(const QModelIndexList &indexes) const
virtual QStringList mimeTypes() const
bool moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild)
virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild)
bool moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild)
virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild)
(since 6.0) virtual void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
virtual QModelIndex parent(const QModelIndex &index) const = 0
bool removeColumn(int column, const QModelIndex &parent = QModelIndex())
virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
bool removeRow(int row, const QModelIndex &parent = QModelIndex())
virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
virtual QHash<int, QByteArray> roleNames() const
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
virtual bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
virtual QModelIndex sibling(int row, int column, const QModelIndex &index) const
virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
virtual QSize span(const QModelIndex &index) const
virtual Qt::DropActions supportedDragActions() const
virtual Qt::DropActions supportedDropActions() const

パブリック・スロット

virtual void revert()
virtual bool submit()

シグナル

void columnsAboutToBeInserted(const QModelIndex &parent, int first, int last)
void columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)
void columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
void columnsInserted(const QModelIndex &parent, int first, int last)
void columnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)
void columnsRemoved(const QModelIndex &parent, int first, int last)
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>())
void headerDataChanged(Qt::Orientation orientation, int first, int last)
void layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
void layoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
void modelAboutToBeReset()
void modelReset()
void rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)
void rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
void rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
void rowsInserted(const QModelIndex &parent, int first, int last)
void rowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
void rowsRemoved(const QModelIndex &parent, int first, int last)

プロテクトされた関数

void beginInsertColumns(const QModelIndex &parent, int first, int last)
void beginInsertRows(const QModelIndex &parent, int first, int last)
bool beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)
bool beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)
void beginRemoveColumns(const QModelIndex &parent, int first, int last)
void beginRemoveRows(const QModelIndex &parent, int first, int last)
void beginResetModel()
void changePersistentIndex(const QModelIndex &from, const QModelIndex &to)
void changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to)
QModelIndex createIndex(int row, int column, const void *ptr = nullptr) const
QModelIndex createIndex(int row, int column, quintptr id) const
void endInsertColumns()
void endInsertRows()
void endMoveColumns()
void endMoveRows()
void endRemoveColumns()
void endRemoveRows()
void endResetModel()
QModelIndexList persistentIndexList() const

プロテクトされたスロット

virtual void resetInternalData()

静的保護メンバー

(since 6.12) Qt::weak_ordering compareData(const QVariant &left, const QVariant &right)
(since 6.12) Qt::weak_ordering compareData(const QVariant &left, const QVariant &right, const QCollator &collator)

詳細な説明

QAbstractItemModel クラスは、モデル/ビューアーキテクチャにおいて他のコンポーネントと相互運用するために、アイテムモデルが使用しなければならない標準インターフェースを定義しています。このクラスは直接インスタンス化されることを想定していません。代わりに、このクラスを継承して新しいモデルを作成する必要があります。

QAbstractItemModel クラスは、モデル/ビュークラスの一つであり、Qtのモデル/ビューフレームワークの一部です。これは、QML 内のアイテムビュー要素や、Qt Widgets モジュール内のアイテムビュークラスの基盤となるデータモデルとして使用できます。

QMLのList View要素や、C++ウィジェットのQListView 、QTableView などのアイテムビューで使用するモデルが必要な場合は、このクラスではなく、QAbstractListModel またはQAbstractTableModel をサブクラス化することを検討してください。

基盤となるデータモデルは、ビューやデリゲートに対してテーブルの階層として公開されます。この階層を利用しない場合、モデルは行と列からなる単純なテーブルとなります。各項目には、QModelIndex によって指定される一意のインデックスがあります。

行と列に番号が振られた3×3のグリッドを示す図で、行1、列2のセルが強調表示されている。

モデルを介してアクセス可能なすべてのデータ項目には、関連付けられたモデルインデックスがあります。このモデルインデックスは、index() 関数を使用して取得できます。各インデックスには、sibling() インデックスを持つ場合があります。子項目には、parent() インデックスがあります。

各項目には複数のデータ要素が関連付けられており、モデルのdata()関数にロール(Qt::ItemDataRole を参照)を指定することで、それらを取得できます。利用可能なすべてのロールのデータは、itemData()関数を使用して同時に取得できます。

各ロールのデータは、特定のQt::ItemDataRole を使用して設定されます。個々のロールのデータはsetData()で個別に設定するか、setItemData()ですべてのロールに対して一括して設定できます。

flags()(Qt::ItemFlag を参照)を使用してアイテムを照会し、そのアイテムが選択、ドラッグ、またはその他の方法で操作可能かどうかを確認できます。

アイテムに子オブジェクトがある場合、hasChildren() は、対応するインデックスに対してtrue を返します。

このモデルには、階層の各レベルごとに `rowCount()` および `columnCount()` が用意されています。行や列は、`insertRows()`、`insertColumns()`、`removeRows()`、および `removeColumns()` を使用して挿入・削除できます。

このモデルは、変更を示すシグナルを発行します。例えば、モデルによって提供されるデータ項目が変更されるたびに、dataChanged() が発行されます。 モデルが提供するヘッダーに変更があった場合、headerDataChanged() が発火します。基となるデータの構造が変更された場合、モデルはlayoutChanged() を発火させ、接続されたビューに対して、新しい構造を考慮して表示されている項目を再表示するよう指示することができます。

モデルを通じて利用可能な項目は、match() 関数を使用して特定のデータを検索することができます。

モデルをソートするには、sort() を使用できます。

サブクラス化

注: モデルのサブクラス化に関する一般的なガイドラインは 、「モデルサブクラス化リファレンス」に記載されています。

QAbstractItemModel をサブクラス化する場合、少なくともindex()、parent()、rowCount()、columnCount()、およびdata() を実装する必要があります。これらの関数は、すべての読み取り専用モデルで使用され、編集可能なモデルの基礎となります。

また、`rowCount()` の実装にコストがかかるモデルに対して特別な動作を提供するために、`hasChildren()` を再実装することもできます。これにより、モデルはビューから要求されるデータの量を制限できるようになり、モデルデータの遅延読み込みを実装する方法として利用できます。

モデルで編集機能を有効にするには、setData() を実装するとともに、flags() を再実装してItemIsEditable が返されるようにする必要があります。また、headerData() およびsetHeaderData() を再実装することで、モデルのヘッダーの表示方法を制御することもできます。

setData() およびsetHeaderData() 関数を再実装する際は、それぞれdataChanged() およびheaderDataChanged() シグナルを明示的に発火させる必要があります。

カスタムモデルでは、他のコンポーネントが使用するためのモデルインデックスを作成する必要があります。これを行うには、createIndex() を呼び出し、その項目に適した行番号と列番号、およびポインタまたは整数値として指定される識別子を指定します。 これらの値の組み合わせは、各アイテムごとに一意でなければなりません。カスタムモデルでは通常、これらの一意の識別子を、他の再実装された関数内で使用して、アイテムデータを取得したり、そのアイテムの親や子に関する情報にアクセスしたりします。一意の識別子に関する詳細については、「単純なツリーモデルの例」を参照してください。

Qt::ItemDataRole で定義されているすべてのロールをサポートする必要はありません。モデルに含まれるデータのタイプによっては、より一般的なロールの有効な情報を返すために、data()関数を実装するだけで十分な場合もあります。 ほとんどのモデルは、少なくとも「Qt::DisplayRole 」に対してアイテムデータのテキスト表現を提供しており、適切に動作するモデルであれば、「Qt::ToolTipRole 」および「Qt::WhatsThisRole 」に対しても有効な情報を提供すべきです。これらのロールをサポートすることで、モデルを標準のQtビューで使用できるようになります。ただし、高度に専門化されたデータを扱う一部のモデルについては、ユーザー定義のロールに対してのみデータを提供することが適切である場合もあります。

サイズ変更可能なデータ構造へのインターフェースを提供するモデルは、insertRows()、removeRows()、insertColumns()、およびremoveColumns() の実装を提供できます。これらの関数を実装する際は、モデルのサイズ変更が発生する前と 発生した後の両方で、接続されたビューにその変更を通知することが重要です。

これらの関数が発信するプライベートシグナルにより、関連付けられたコンポーネントは、データが利用不可になる前に処理を実行する機会が与えられます。また、挿入および削除操作をこれらの開始関数と終了関数でカプセル化することで、モデルがpersistent model indexes を正しく管理できるようになります。選択操作を適切に処理したい場合は、これらの関数を確実に呼び出す必要があります。子要素を持つ項目を挿入または削除する場合、その子要素に対してこれらの関数を呼び出す必要はありません。つまり、親項目が子要素の処理を自動的に行います。

段階的にデータを格納するモデルを作成するには、fetchMore() およびcanFetchMore() を再実装できます。fetchMore() の再実装によってモデルに行が追加される場合は、beginInsertRows() およびendInsertRows() を呼び出す必要があります。

スレッドセーフ性

QObjectのサブクラスであるQAbstractItemModelは、thread-safe ではありません。QAbstractItemModelに関連するAPIは、モデルオブジェクトが存在するスレッドからのみ呼び出す必要があります。QAbstractItemModelがビューに接続されている場合、ビューはそのスレッドに存在し、そのスレッドからモデルとやり取りを行うため、QAbstractItemModelはGUIスレッド上で動作します。 バックグラウンドスレッドを使用してモデルの内容を設定または変更することは可能ですが、モデル関連のAPIを直接呼び出すことはできないため、慎重に行う必要があります。代わりに、更新内容をキューに入れ、メインスレッドで適用する必要があります。これは、キュー化された接続を使用して行うことができます。

関連項目: モデルクラス、モデルサブクラス化リファレンス、QModelIndex 、QAbstractItemView 、QRangeModel 、アイテムビューでのドラッグ&ドロップの使用、シンプルなツリーモデルの例、編集可能なツリーモデルの例、および「Fetch More」の例。

メンバ型のドキュメント

enum class QAbstractItemModel::CheckIndexOption
flags QAbstractItemModel::CheckIndexOptions

この列挙型は、QAbstractItemModel::checkIndex() によって実行されるチェックを制御するために使用できます。

定数定数名説明
QAbstractItemModel::CheckIndexOption::NoOption0x0000チェックオプションは指定されません。
QAbstractItemModel::CheckIndexOption::IndexIsValid0x0001QAbstractItemModel::checkIndex() に渡されたモデルインデックスが、有効なモデルインデックスであるかどうかがチェックされます。
QAbstractItemModel::CheckIndexOption::DoNotUseParent0x0002QAbstractItemModel::checkIndex() に渡されたインデックスの親の使用に関するチェックは一切行われません。
QAbstractItemModel::CheckIndexOption::ParentIsInvalid0x0004QAbstractItemModel::checkIndex() に渡されたモデルインデックスの親が、無効なモデルインデックスであるかどうかがチェックされます。このオプションと DoNotUseParent の両方が指定された場合、このオプションは無視されます。

CheckIndexOptions 型は、QFlags<CheckIndexOption> の typedef です。これは、CheckIndexOption 値の OR 組み合わせを格納します。

enum QAbstractItemModel::LayoutChangeHint

この列挙型は、モデルがレイアウトを変更する方法を記述しています。

定数値説明
QAbstractItemModel::NoLayoutChangeHint0ヒントはありません。
QAbstractItemModel::VerticalSortHint1行のソートが行われています。
QAbstractItemModel::HorizontalSortHint2列のソートが行われています。

VerticalSortHint および HorizontalSortHint は、アイテムがモデル内の別の親に移動されるのではなく、同じ親内で移動されていることを意味することに注意してください。また、フィルタリングによって除外されたり、追加されたりすることもありません。

メンバ関数のドキュメント

[explicit] QAbstractItemModel::QAbstractItemModel(QObject *parent = nullptr)

指定されたparent を使用して、抽象アイテムモデルを構築します。

[virtual noexcept] QAbstractItemModel::~QAbstractItemModel()

抽象アイテムモデルを破棄します。

[protected] void QAbstractItemModel::beginInsertColumns(const QModelIndex &parent, int first, int last)

カラムの挿入処理を開始します。

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

parent のインデックスは、新しい列が挿入される親に対応します。first およびlast は、挿入後に新しい列が持つ列番号です。

行に4、5、6列を挿入するモデルのアイテムに挿入する列の範囲について、最初の列番号と最後の列番号を指定します。

たとえば、図に示すように、4番目の列の前に3つの列を挿入する場合、first は4、last は6となります:

beginInsertColumns(parent, 4, 6);

これにより、3つの新しい列が4、5、6番目の列として挿入されます。

行に6、7、8列を追加する列を追加する場合は、最後の列の後に挿入します。

たとえば、図に示すように、既存の6つの列(5列目で終了)のコレクションに3つの列を追加する場合、first は6、last は8となります:

beginInsertColumns(parent, 6, 8);

これにより、2つの新しい列が6、7、8番目の列として追加されます。

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

endInsertColumns()も参照してください 。

[protected] void QAbstractItemModel::beginInsertRows(const QModelIndex &parent, int first, int last)

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

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

parent のインデックスは、新しい行が挿入される親行に対応します。first およびlast は、新しい行が挿入された後に割り当てられる行番号です。

リストに行2、3、4を挿入するモデルの項目に挿入したい行の範囲について、最初の行番号と最後の行番号を指定します。

たとえば、図に示すように、行 2 の前に 3 行を挿入する場合、first は 2、last は 4 となります:

beginInsertRows(parent, 2, 4);

これにより、3つの新しい行が2行目、3行目、4行目として挿入されます。

リストに行4、5を追加する行を追加する場合は、最後の行の後に挿入します。

たとえば、図に示すように、既存の4行(3行目で終わる)のコレクションに2行を追加する場合、first は4、last は5となります:

beginInsertRows(parent, 4, 5);

これにより、2つの新しい行が4行目と5行目として追加されます。

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

endInsertRows()も参照してください 。

[protected] bool QAbstractItemModel::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 の範囲内に入らないようにする必要があります。また、列を自身の子または祖先へ移動しようとしないよう注意してください。いずれかの条件が真の場合、このメソッドはfalse を返します。その場合は、移動操作を中止する必要があります。

endMoveColumns()も参照してください 。

[protected] bool QAbstractItemModel::beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)

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

サブクラスで再実装する場合、このメソッドを使用することで、モデル内のエンティティの移動が簡略化されます。このメソッドは、モデル内の永続インデックスの移動を担当します。これがないと、ユーザー自身がその処理を行う必要があります。beginMoveRows およびendMoveRows を使用することは、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 までの範囲内に含まれていないことを確認する必要があります。また、行を自身の子要素または祖先要素のいずれかに移動しようとしないことも確認する必要があります。いずれかの条件が真の場合、このメソッドはfalse を返します。その場合は、移動操作を中止する必要があります。

行をある親要素から別の親要素へ移動するモデル内で移動させたいソース親要素内の行の範囲について、最初の行番号と最後の行番号を指定します。また、その範囲を移動させる先の親要素内の行も指定します。

たとえば、図に示すように、ソースの2行目から4行目までの3行を移動する場合、sourceFirst は2、sourceLast は4となります。これらの行を宛先の2行目の上に移動するため、destinationChild は2となります。

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

これにより、ソースの2行目、3行目、4行目が、宛先ではそれぞれ2、3、4行目になります。影響を受ける他の兄弟行も、それに応じて位置がずれます。

別の親行に行を追加する別の親要素に行を追加するには、それらを最後の行の後に移動させます。

たとえば、図に示すように、3つの行を既存の6行(5行目で終了)のコレクションに移動する場合、destinationChild は6となります:

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

これにより、対象の行は6、7、8として、対象の親の末尾に移動します。

同じ親要素内で列を上に移動する同じ親要素内で行を移動させるには、移動先の行を指定します。

たとえば、図に示すように、1つの項目を行2から行0へ移動させる場合、sourceFirst およびsourceLast は2となり、destinationChild は0となります。

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

他の行がそれに応じてずれる可能性があることに注意してください。また、同じ親要素内でアイテムを移動する際は、無効な移動や何の効果もない移動を試みてはなりません。 上記の例では、移動前にアイテム2は行2にあるため、行2(すでにそこに存在する)や行3(行3は行3より上を意味するため、すでにそこに存在する)へ移動することはできません。

同じ親要素内で1行分下に移動する同じ親要素内の行を移動させるには、移動先の行を指定してください。

たとえば、図に示すように、1つのアイテムを行2から行4へ移動させる場合、sourceFirst およびsourceLast は2、destinationChild は4となります。

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

なお、他の行がそれに応じてずれる場合があることに注意してください。

endMoveRows()も参照してください 。

[protected] void QAbstractItemModel::beginRemoveColumns(const QModelIndex &parent, int first, int last)

カラムの削除処理を開始します。

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

parent のインデックスは、新しいカラムが削除される親に対応します。first およびlast は、削除される最初のカラムと最後のカラムのカラム番号です。

行から4、5、6列を削除するモデル内の項目から削除する列の範囲について、最初の列番号と最後の列番号を指定します。

たとえば、図に示すように、4 列目から 6 列目までの 3 列を削除する場合、first は 4、last は 6 となります。

beginRemoveColumns(parent, 4, 6);

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

endRemoveColumns()も参照してください 。

[protected] void QAbstractItemModel::beginRemoveRows(const QModelIndex &parent, int first, int last)

行の削除処理を開始します。

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

parent のインデックスは、新しい行が削除される親に対応します。first およびlast は、削除される行の行番号です。

リストから2行目と3行目を削除するモデル内の項目から削除したい行の範囲について、最初の行番号と最後の行番号を指定します。

たとえば、図に示すように、2行目から3行目までの2行を削除する場合、first は2、last は3となります:

beginRemoveRows(parent, 2, 3);

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

endRemoveRows()も参照してください 。

[protected] void QAbstractItemModel::beginResetModel()

モデルのリセット操作を開始します。

リセット操作を行うと、関連付けられているすべてのビューにおいて、モデルが現在の状態にリセットされます。

注: このモデルに紐付けられているビューもすべて リセットされます。

モデルがリセットされると、そのモデルから以前に報告されたデータはすべて無効となり、再度クエリを実行する必要があります。また、現在のアイテムおよび選択されているアイテムもすべて無効になります。

モデルのデータが大幅に変更された場合、基になるデータソースやその構造が変更されたことを他のコンポーネントに通知するために `dataChanged()` を発行するよりも、この関数を呼び出すほうが簡単な場合があります。

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

この関数は、modelAboutToBeReset() シグナルを発行します。

modelAboutToBeReset()、modelReset()、およびendResetModel()も参照してください 。

[virtual] QModelIndex QAbstractItemModel::buddy(const QModelIndex &index) const

index で表される項目のバディのモデルインデックスを返します。ユーザーが項目を編集しようとした際、ビューはこの関数を呼び出して、代わりにモデル内の別の項目を編集すべきかどうかを確認します。その後、ビューはバディ項目から返されたモデルインデックスを使用してデリゲートを構築します。

この関数のデフォルトの実装では、各アイテムがそれ自体のバディとなります。

[virtual] bool QAbstractItemModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const

モデルがdata のドロップを受け入れられる場合、true を返します。このデフォルトの実装では、data にmimeTypes()のリストに少なくとも1つのフォーマットが含まれているか、およびaction がモデルのsupportedDropActions()に含まれているかのみを確認します。

data をrow 、column 、parent にaction を使用してドラッグ&ドロップできるかどうかをテストしたい場合は、カスタムモデルでこの関数を再実装してください。そのテストが必要ない場合は、この関数を再実装する必要はありません。

dropMimeData() および「アイテムビューでのドラッグ&ドロップの使用」も参照してください 。

[virtual invokable] bool QAbstractItemModel::canFetchMore(const QModelIndex &parent) const

parent に対してさらに利用可能なデータがある場合は `true ` を返し、そうでない場合は `false` を返します。

デフォルトの実装では、常に `false` を返します。

canFetchMore() がtrue を返す場合、fetchMore() 関数を呼び出す必要があります。これは、例えばQAbstractItemView の動作です。

注:この関数は 、メタオブジェクトシステムを介して、また QML から呼び出すことができます。Q_INVOKABLE を参照してください。

fetchMore()も参照してください 。

[protected] void QAbstractItemModel::changePersistentIndex(const QModelIndex &from, const QModelIndex &to)

指定されたfrom モデルインデックスと一致するQPersistentModelIndex を、指定されたto モデルインデックスに変更します。

指定されたfrom モデルインデックスと一致する永続モデルインデックスが見つからなかった場合、変更は行われません。

persistentIndexList() およびchangePersistentIndexList()も参照してください 。

[protected] void QAbstractItemModel::changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to)

指定されたfrom モデルインデックスリスト内のインデックスと一致する{QPersistentModelIndex}を、指定されたto モデルインデックスリストに変更します。

指定されたfrom モデルインデックスリスト内のインデックスと一致する永続的なモデルインデックスが見つからない場合、何も変更されません。

persistentIndexList() およびchangePersistentIndex()も参照してください 。

bool QAbstractItemModel::checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const

この関数は、index がこのモデルに対して有効なモデルインデックスであるかどうかを検証します。有効なモデルインデックスとは、無効なモデルインデックス、あるいは以下のすべての条件を満たす有効なモデルインデックスのいずれかです:

  • そのインデックスのモデルがthis であること;
  • インデックスの行番号が 0 以上であること;
  • インデックスの行が、その親インデックスの行数よりも小さいこと;
  • インデックスの列番号が 0 以上であること;
  • インデックスの列数が、その親インデックスの列数未満であること。

引数 `options ` により、これらのチェック条件の一部が変更される場合があります。`options ` に `IndexIsValid` が含まれている場合、`index ` は有効なインデックスでなければなりません。これは、有効なインデックスを前提とする `data()` や `setData()` といった関数を再実装する際に役立ちます。

options にDoNotUseParent が含まれている場合、parent()を呼び出すはずのチェックは省略されます。これにより、parent()の再実装からこの関数を呼び出すことが可能になります(そうでなければ、無限再帰が発生し、クラッシュしてしまうためです)。

options にDoNotUseParent が含まれておらず、ParentIsInvalid が含まれている場合、追加のチェックが行われます。つまり、親インデックスが無効でないか確認されます。これは、リストやテーブルなどのフラットなモデルを実装する際に有用です。こうしたモデルでは、どのモデルインデックスも有効な親インデックスを持つべきではないからです。

この関数は、すべてのチェックが成功した場合は true を返し、そうでない場合は false を返します。これにより、Q_ASSERT やその他の同様のデバッグ機構でこの関数を使用することが可能になります。何らかのチェックに失敗した場合、qt.core.qabstractitemmodel.checkindex ロギングカテゴリに警告メッセージが出力され、その失敗のデバッグに役立つ情報が含まれます。

注:この関数は 、独自のアイテムモデルを実装するためのデバッグ補助機能です。複雑なモデルを開発する場合や、複雑なモデル階層を構築する場合(例:プロキシモデルを使用する場合など)、QAbstractItemModel API に誤って(上記で定義されたような)無効なモデルインデックスが渡されることによるバグを検出するために、この関数を呼び出すと有用です。

警告: アイテムモデルに無効なインデックスを渡すことは未定義の挙動となるため 、アプリケーションではこれを避ける必要があります。また、アイテムモデルが無効なインデックスを適切に処理するために採用している可能性のある「防御的」プログラミングに依存してはなりません。

QModelIndexも参照してください 。

[virtual, since 6.0] bool QAbstractItemModel::clearItemData(const QModelIndex &index)

指定されたindex のすべてのロールに保存されているデータを削除します。成功した場合はtrue を返し、失敗した場合はfalse を返します。データの削除に成功した場合は、dataChanged()シグナルを発火させる必要があります。基底クラスの実装ではfalse

この関数は Qt 6.0 で導入されました。

data()、itemData()、setData()、およびsetItemData()も参照してください 。

[pure virtual invokable] int QAbstractItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const

指定されたparent の子要素の列数を返します。

ほとんどのサブクラスでは、列数はparent とは無関係です。

例:

int MyModel::columnCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent);
    return 3;
}

注: テーブルベースのモデルを実装する場合 、親が有効なときは columnCount() は 0 を返す必要があります。

注:この関数は 、メタオブジェクトシステムを介して、またはQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

rowCount()も参照してください 。

[private signal] void QAbstractItemModel::columnsAboutToBeInserted(const QModelIndex &parent, int first, int last)

このシグナルは、列がモデルに挿入される直前に発火します。新しい項目は、指定されたparent 項目の下、first とlast の間(両端を含む)に配置されます。

注: このシグナルに接続されたコンポーネントは 、モデルの寸法変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコード内で明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発行することはできません。

関連項目: insertColumns() およびbeginInsertColumns()。

[private signal] void QAbstractItemModel::columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)

このシグナルは、モデル内で列が移動される直前に発火します。移動対象となるのは、指定されたsourceParent 項目の下にある、sourceStart からsourceEnd までの範囲(両端を含む)にある項目です。これらは、列destinationColumn から始まるdestinationParent へ移動されます。

注:このシグナルに接続されたコンポーネントは、モデルの寸法変更に対応するためにこのシグナルを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコードから明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発火させることはできません。

関連項目: beginMoveRows()。

[private signal] void QAbstractItemModel::columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last)

このシグナルは、モデルからカラムが削除される直前に発火します。削除対象となるのは、指定されたparent 項目の下にある、first からlast までの範囲(両端を含む)の項目です。

注: このシグナルに接続されたコンポーネントは 、モデルの次元変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコード内で明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発火させることはできません。

関連項目: removeColumns() およびbeginRemoveColumns()。

[private signal] void QAbstractItemModel::columnsInserted(const QModelIndex &parent, int first, int last)

このシグナルは、モデルに列が挿入された後に発火します。新しい項目は、指定されたparent 項目の下にある、first からlast までの範囲(両端を含む)のものです。

注: このシグナルに接続されたコンポーネントは 、モデルの次元の変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコード内で明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発火させることはできません。

関連項目: insertColumns() およびbeginInsertColumns()。

[private signal] void QAbstractItemModel::columnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)

このシグナルは、モデル内で列が移動された後に発火します。指定されたsourceParent 項目の下にある、sourceStart からsourceEnd までの項目(両端を含む)が、列destinationColumn から始まるdestinationParent へ移動されました。

注:このシグナルに接続されたコンポーネントは、モデルの寸法変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコードでは明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発行することはできません。

関連項目: beginMoveRows()。

[private signal] void QAbstractItemModel::columnsRemoved(const QModelIndex &parent, int first, int last)

このシグナルは、モデルからカラムが削除された後に発火します。削除されるのは、指定されたparent 項目の下にある、first からlast までの範囲(両端を含む)の項目です。

注: このシグナルに接続されたコンポーネントは 、モデルの次元変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコード内で明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発行することはできません。

関連項目: removeColumns() およびbeginRemoveColumns()。

[static protected, since 6.12] Qt::weak_ordering QAbstractItemModel::compareData(const QVariant &left, const QVariant &right)

[static protected, since 6.12] Qt::weak_ordering QAbstractItemModel::compareData(const QVariant &left, const QVariant &right, const QCollator &collator)

left (QVariant )とright (QVariant )を比較し、その順序をweak ordering として返します。

QVariant が文字列として比較される場合、locale-aware およびcase-sensitive の比較には、オプションのcollator オブジェクトが使用されます。コラターが指定されていない場合、文字列は文字の数値的な Unicode 値のみに基づいて比較されます。これは高速ですが、多くの場合、ユーザーがユーザーインターフェースに期待する動作とは異なります。

この関数は、QAbstractItemModel::sort() の実装に適しており、比較できないバリアント値(つまり、QVariant::compare がunordered を返すような場合)に対しても弱い順序付けを提供します。これにより、順序付け可能なデータを必要とするstd::sort やstd::stable_sort での使用が安全になります。

void Model::sort(int column, Qt::SortOrder sortOrder)
{
    // Model operates on a QList<QVariant> data
    std::sort(data.begin(), data.end(), [=](const QVariant &lhs, const Variant &rhs){
        const auto ordering = compareData(lhs, rhs);
        return sortOrder == Qt::AscendingOrder ? sortOrder < 0 : sortOrder > 0;
    });
}

left QVariant が文字列を保持している場合、オプションのcollator を使用して、バリアントas strings が比較されます。

そうでない場合、実装ではQVariant::compare() を使用してleft とright を比較しますが、これは部分順序しか提供できません。比較の結果がunordered となり、かつleft とright のmeta type が同じでない場合、この関数はバリアントを共通の型にconvert しようと試み、比較を再度行います。

それでもunordered の結果が返される場合は、両方のバリアントの文字列表現が比較されます。これにより、2つの空文字列が比較される可能性がありますが、これらは{Qt::weak_ordering::}{equivalent}です。

Invalid variants 有効な値を保持しているバリアントよりも常に大きいとみなされます。

これらの関数は Qt 6.12 で導入されました。

関連項目: 3 項比較、sort()、QVariant::compare 、およびQSortFilterProxyModel 。

[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, const void *ptr = nullptr) const

指定されたrow およびcolumn に対して、内部ポインタptr を持つモデルインデックスを作成します。

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

この関数は、モデルのサブクラスがモデルインデックスを作成する際に使用しなければならない、一貫性のあるインターフェースを提供します。

[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, quintptr id) const

指定されたrow およびcolumn に対して、内部識別子id を持つモデルインデックスを作成します。

この関数は、モデルサブクラスがモデルインデックスを作成する際に使用しなければならない一貫性のあるインターフェースを提供します。

QModelIndex::internalId()も参照してください 。

[pure virtual invokable] QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const

index で指定されたrole の下に格納されているデータを、 が指す項目について返します。

注: 返す値がない場合は 、無効な(デフォルト構築された)QVariant を返してください。

注:この関数は 、メタオブジェクトシステムおよびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: Qt::ItemDataRole 、setData()、およびheaderData()。

[signal] void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>())

このシグナルは、既存のアイテムのデータが変更されるたびに発火します。

アイテムが同じ親を持つ場合、影響を受けるのはtopLeft からbottomRight までの範囲のアイテムです(両端を含む)。アイテムが同じ親を持たない場合、動作は未定義となります。

setData() 関数を再実装する場合、このシグナルを明示的に発火させる必要があります。

オプションのroles 引数を使用すると、実際に変更されたデータロールを指定できます。roles引数が空のベクトルである場合、すべてのロールが変更されたものとみなされます。roles引数内の要素の順序は、何ら意味を持ちません。

headerDataChanged()、setData()、およびlayoutChanged()も参照してください 。

[virtual] bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)

指定されたaction で終了したドラッグ&ドロップ操作によって渡されたdata を処理します。

データとアクションがモデルによって処理された場合は `true ` を返し、そうでない場合は `false` を返します。

指定された `row`、`column `、および `parent ` は、操作が終了したモデル内の項目の位置を示します。正しい位置でアクションを完了させるのは、モデルの責任です。

たとえば、QTreeView 内の項目に対するドロップ操作では、新しい項目が、row 、column 、およびparent で指定された項目の子として挿入されるか、あるいはその項目の兄弟として挿入されることになります。

row およびcolumn が -1 の場合、ドロップされたデータはparent に直接ドロップされたものとみなされる。通常、これはデータをparent の子要素として追加することを意味する。row およびcolumn が 0 以上の場合、ドロップは指定されたparent 内の、指定されたrow およびcolumn の直前で発生したことを意味する。

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

supportedDropActions()、canDropMimeData()、および「アイテムビューでのドラッグ&ドロップの使用」も参照してください 。

[protected] void QAbstractItemModel::endInsertColumns()

カラムの挿入処理を終了します。

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

beginInsertColumns()も参照してください 。

[protected] void QAbstractItemModel::endInsertRows()

行の挿入処理を終了します。

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

beginInsertRows()も参照してください 。

[protected] void QAbstractItemModel::endMoveColumns()

列の移動操作を終了します。

サブクラスを実装する際は、モデルの基盤となるデータストア内でデータの移動を行った後、この関数を呼び出す必要があります。

beginMoveColumns()も参照してください 。

[protected] void QAbstractItemModel::endMoveRows()

行の移動操作を終了します。

サブクラスを実装する際は、モデルの基盤となるデータストア内でデータを移動した後、この関数を呼び出す必要があります。

beginMoveRows()も参照してください 。

[protected] void QAbstractItemModel::endRemoveColumns()

カラムの削除処理を終了します。

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

beginRemoveColumns()も参照してください 。

[protected] void QAbstractItemModel::endRemoveRows()

行の削除処理を終了します。

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

beginRemoveRows()も参照してください 。

[protected] void QAbstractItemModel::endResetModel()

モデルのリセット処理を実行します。

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

この関数は、modelReset() シグナルを発行します。

beginResetModel()も参照してください 。

[virtual invokable] void QAbstractItemModel::fetchMore(const QModelIndex &parent)

parent インデックスで指定された親を持つアイテムについて、利用可能なデータをすべて取得します。

モデルを段階的に初期化する場合は、これを再実装してください。

デフォルトの実装では何も行いません。

注:この関数は 、メタオブジェクトシステムや QML から呼び出すことができます。Q_INVOKABLE を参照してください。

canFetchMore()も参照してください 。

[virtual invokable] Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex &index) const

指定されたindex のアイテムフラグを返します。

基底クラスの実装では、アイテム(ItemIsEnabled )を有効にし、選択可能にする(ItemIsSelectable )フラグの組み合わせを返します。

注:この関数は 、メタオブジェクトシステムを介して、およびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

「Qt::ItemFlags」も参照してください 。

[virtual invokable] bool QAbstractItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const

parent に子ノードが存在する場合、true を返します。そうでない場合は、false を返します。

子要素の数を調べるには、親要素に対して `rowCount()` を使用します。

なお、特定のインデックスに `Qt::ItemNeverHasChildren ` フラグが設定されている場合、このメソッドを使用してそのインデックスに `hasChildren` があると報告することは、未定義の挙動となります。

注:この関数は 、メタオブジェクトシステムを介して、および QML から呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: parent() およびindex()。

[invokable] bool QAbstractItemModel::hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const

モデルが、parent を指定したrow およびcolumn に対して有効なQModelIndex を返す場合は、true を返し、それ以外の場合はfalse を返します。

注:この関数は 、メタオブジェクトシステムを介して、およびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

[virtual invokable] QVariant QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const

指定されたヘッダー内のrole およびsection に対応するデータを、指定されたorientation で返します。

水平方向のヘッダーの場合、セクション番号は列番号に対応します。同様に、垂直方向のヘッダーの場合、セクション番号は行番号に対応します。

注:この関数は 、メタオブジェクトシステムを介して、およびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

Qt::ItemDataRole 、setHeaderData()、およびQHeaderViewも参照してください 。

[signal] void QAbstractItemModel::headerDataChanged(Qt::Orientation orientation, int first, int last)

このシグナルは、ヘッダーが変更されるたびに発火します。orientation は、水平ヘッダーが変更されたか、垂直ヘッダーが変更されたかを示します。ヘッダー内のfirst からlast までのセクションを更新する必要があります。

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

列数や行数を変更する場合は、このシグナルを発行する必要はなく、begin/end関数を使用してください(詳細については、QAbstractItemModel クラスの説明にあるサブクラス化に関するセクションを参照してください)。

headerData()、setHeaderData()、およびdataChanged()も参照してください 。

[pure virtual invokable] QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const

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

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

注:この関数は 、メタオブジェクトシステムおよびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

createIndex()も参照してください 。

[invokable] bool QAbstractItemModel::insertColumn(int column, const QModelIndex &parent = QModelIndex())

指定された `column ` の前に、指定された `parent ` の子項目に 1 つの列を挿入します。

列が挿入された場合はtrue を返し、そうでない場合はfalse を返します。

注:この関数は 、メタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: ` insertColumns()`、`insertRow()`、および `removeColumn()`。

[virtual invokable] bool QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())

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

column が0の場合、列は既存の列の先頭に追加されます。

column がcolumnCount()の場合、列は既存の列の末尾に追加されます。

parent に子要素がない場合、count 個の列を持つ単一の行が挿入されます。

列の挿入に成功した場合はtrue を返し、そうでない場合はfalse を返します。

基底クラスの実装では何も行わず、false を返します。

独自のモデルを実装する場合、挿入をサポートしたいときはこの関数を再実装できます。あるいは、データを変更するための独自の API を提供することもできます。

注:この関数は 、メタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: insertRows()、removeColumns()、beginInsertColumns()、およびendInsertColumns()。

[invokable] bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex())

指定された `row ` の前に、指定された `parent ` の子項目の中に 1 行を挿入します。

注:この関数は 、仮想メソッドinsertRows を呼び出します。

行が挿入された場合は `true ` を返し、そうでない場合は `false` を返します。

注:この関数は 、メタオブジェクトシステムを介して、また QML から呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: insertRows(),insertColumn(),removeRow().

[virtual invokable] bool QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())

注:この関数の基底クラス実装は 何も行わず、false を返します。

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

row が0の場合、行は親の既存の行の先頭に追加されます。

row がrowCount() の場合、行は親にある既存の行の末尾に追加されます。

parent に子がない場合、count 行を含む単一の列が挿入されます。

行の挿入に成功した場合はtrue を返し、失敗した場合はfalse を返します。

独自のモデルを実装する場合、挿入をサポートしたいときはこの関数を再実装できます。あるいは、データを変更するための独自の API を提供することもできます。いずれの場合も、モデルが変更されたことを他のコンポーネントに通知するために、beginInsertRows() およびendInsertRows() を呼び出す必要があります。

注:この関数は 、メタオブジェクトシステムや QML から呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: insertColumns()、removeRows()、beginInsertRows()、およびendInsertRows()。

[virtual] QMap<int, QVariant> QAbstractItemModel::itemData(const QModelIndex &index) const

指定されたindex にあるアイテムについて、モデル内のすべての事前定義済みロールの値を含むマップを返します。

マップにカスタムロールを含めるなど、この関数のデフォルトの動作を拡張したい場合は、この関数を再実装してください。

setItemData()、Qt::ItemDataRole 、およびdata()も参照してください 。

[signal] void QAbstractItemModel::layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)

このシグナルは、モデルのレイアウトが変更される直前に発せられます。このシグナルに接続されたコンポーネントは、これを利用してモデルのレイアウトの変更に対応します。

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

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

layoutChanged() およびchangePersistentIndex()も参照してください 。

[signal] void QAbstractItemModel::layoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)

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

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

オプションのparents パラメータは、モデルのレイアウトのどの部分が変更されているかについて、より具体的な通知を行うために使用されます。空のリストは、モデル全体のレイアウトの変更を示します。parents リスト内の要素の順序は重要ではありません。オプションのhint パラメータは、モデルのレイアウトが再構成されている間に何が起こっているかについてのヒントを与えるために使用されます。

サブクラスは、`layoutChanged()` を発行する前に、永続的なモデルインデックスをすべて更新する必要があります。つまり、構造が変更された際には:

layoutAboutToBeChanged()、dataChanged()、headerDataChanged()、modelReset()、およびchangePersistentIndex()も参照してください 。

[virtual invokable] QModelIndexList QAbstractItemModel::match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const

start インデックスの列にある項目のうち、指定されたrole の下に格納されているデータが、指定されたvalue と一致するもののインデックスのリストを返します。検索の実行方法は、指定されたflags によって定義されます。返されるリストが空の場合もあります。 また、たとえばプロキシモデルが使用されている場合など、リスト内の結果の順序がモデル内の順序と一致しない場合がある点にも注意してください。結果の順序を信頼することはできません。

検索はstart のインデックスから開始され、一致するデータ項目の数がhits に等しくなるか、最後の行に到達するか、あるいは検索が再びstart に到達するまで続きます。これは、flags でMatchWrap が指定されているかどうかによって異なります。すべての一致する項目を検索したい場合は、hits = -1を使用してください。

デフォルトでは、この関数はすべての項目に対して、value で指定された検索語で始まる項目を探す、ループバック付きの文字列ベースの比較を行います。

注:この関数のデフォルトの実装では 、列のみが検索対象となります。異なる検索動作を実装するには、この関数を再実装してください。

注: この関数は 、メタオブジェクトシステムおよび QML から呼び出すことができます。Q_INVOKABLE を参照してください。

[virtual] QMimeData *QAbstractItemModel::mimeData(const QModelIndexList &indexes) const

指定されたindexes のリストに対応する、シリアライズされたデータ項目を含むオブジェクトを返します。 エンコードされたデータを記述するために使用されるフォーマットは、mimeTypes() 関数から取得されます。このデフォルトの実装では、mimeTypes() のデフォルト実装によって返されるデフォルトの MIME タイプが使用されます。カスタムモデル内でmimeTypes() を再実装して、より多くの MIME タイプを返すようにした場合は、この関数を再実装してそれらを利用するようにしてください。

indexes のリストが空の場合、またはサポートされているMIMEタイプが存在しない場合、シリアライズされた空のリストではなく、nullptr が返されます。

mimeTypes() およびdropMimeData()も参照してください 。

[virtual] QStringList QAbstractItemModel::mimeTypes() const

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

カスタムモデルでドラッグ&ドロップ機能を実装する際、デフォルトの内部 MIME タイプ以外の形式でデータを返す場合は、この関数を再実装して、独自の MIME タイプのリストを返すようにしてください。

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

mimeData() およびdropMimeData()も参照してください 。

[private signal] void QAbstractItemModel::modelAboutToBeReset()

このシグナルは、beginResetModel() が呼び出された際、モデルの内部状態(例:永続化されたモデルインデックス)が無効化される前に発せられます。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発行することはできません。

関連項目: beginResetModel() およびmodelReset()。

[private signal] void QAbstractItemModel::modelReset()

このシグナルは、モデルの内部状態(例:永続化モデルのインデックス)が無効化された後、endResetModel() が呼び出された際に発火します。

モデルがリセットされた場合、それ以前にそのモデルから取得されたすべての情報は無効であるとみなすべきであることに注意してください。これには、rowCount()、columnCount()、flags()、およびdata()やroleNames()を通じて取得されたデータなどが含まれますが、これらに限定されません。

注:これは プライベートシグナルです。シグナル接続では使用できますが、ユーザーが発行することはできません。

endResetModel() およびmodelAboutToBeReset()も参照してください 。

[invokable] bool QAbstractItemModel::moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild)

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

列の移動に成功した場合は `true ` を返し、そうでない場合は `false` を返します。

注:この関数は 、メタオブジェクトシステムを介して、および QML から呼び出すことができます。Q_INVOKABLE を参照してください。

moveColumns() およびmoveRow()も参照してください 。

[virtual invokable] bool QAbstractItemModel::moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild)

これをサポートするモデルにおいて、親sourceParent の下にあるcount の列のうち、指定されたsourceColumn で始まるものを、親destinationParent の下にあるdestinationChild の列へ移動します。

列の移動に成功した場合は `true ` を返し、失敗した場合は `false` を返します。

基底クラスの実装では何も行わず、false を返します。

独自のモデルを実装する場合、移動機能をサポートしたいときは、この関数を再実装できます。あるいは、データを変更するための独自のAPIを提供することもできます。

注:この関数は 、メタオブジェクトシステムおよびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

beginMoveColumns() およびendMoveColumns()も参照してください 。

[invokable] bool QAbstractItemModel::moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild)

これをサポートするモデルでは、`sourceRow ` を `sourceParent ` から `destinationParent` 配下の `destinationChild ` に移動します。

行の移動に成功した場合は `true ` を返し、そうでない場合は `false` を返します。

注:この関数は 、メタオブジェクトシステムを介して、および QML から呼び出すことができます。Q_INVOKABLE を参照してください。

moveRows() およびmoveColumn()も参照してください 。

[virtual invokable] bool QAbstractItemModel::moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild)

これをサポートするモデルにおいて、親ノード `sourceParent ` 配下の `sourceRow ` から始まる `count ` 行を、親ノード `destinationParent` 配下の `destinationChild ` 行へ移動します。

行の移動に成功した場合は `true ` を返し、失敗した場合は `false` を返します。

基底クラスの実装では何も行わず、false を返します。

独自のモデルを実装する場合、移動機能をサポートしたいときはこの関数を再実装できます。あるいは、データを変更するための独自の API を提供することもできます。

注:この関数は 、メタオブジェクトシステムや QML から呼び出すことができます。Q_INVOKABLE を参照してください。

beginMoveRows() およびendMoveRows()も参照してください 。

[virtual, since 6.0] void QAbstractItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const

指定されたindex に対して、リクエストされたデータをroleDataSpan に設定します。

デフォルトの実装では、スパン内の各ロールに対して単にdata()を呼び出します。サブクラスでは、この関数を再実装して、ビューへより効率的にデータを提供することができます:

void MyModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
{
    for (QModelRoleData &roleData : roleDataSpan) {
        int role = roleData.role();

        // ... obtain the data for index and role ...

        roleData.setData(result);
    }
}

上記のコードスニペットでは、index は呼び出し全体を通じて同じです。これは、index の情報を取得するために必要なデータ構造へのアクセスを、1回だけで済ませることができることを意味します(関連するコードをループの外側に持ち出すことで実現)。

QModelRoleData::setData() や、同様にQVariant::setValue() の使用は、QVariant を個別に構築して単純な代入演算子を使用するよりも推奨されます。これは、前者の方法ではQModelRoleData 内に格納されているQVariant オブジェクト用にすでに割り当てられたメモリを再利用できるのに対し、後者の方法では常に新しいバリアントを割り当て、古いものを破棄してしまうためです。

なお、ビューは以前の呼び出しで使用されたスパンを引数として multiData() を呼び出す可能性があり、そのためスパンにはすでにデータが含まれている場合があります。したがって、モデルが特定のロールに対するデータを返せない場合は、対応するQModelRoleData オブジェクト内のデータを必ずクリアする必要があります。 これは、QModelRoleData::clearData() を呼び出すか、同様にデフォルト構築されたQVariant を設定するなどして行うことができます。データをクリアしなかった場合、ビューは「古い」データが対応するロールで使用されるべきものであると誤解してしまいます。

最後に、コードの重複を避けるために、サブクラスは、要素が1つだけのスパンを指定することで、data()をmultiData()を用いて再実装することもできます:

QVariant MyModel::data(const QModelIndex &index, int role) const
{
    QModelRoleData roleData(role);
    multiData(index, roleData);
    return roleData.data();
}

注: モデルは 、span内のロールを変更したり、spanの要素の順序を変更したりすることは許可されていません。そうした場合、未定義の挙動が生じます。

注: この関数に無効なモデルインデックスを渡すことは許可されていません 。

この関数は Qt 6.0 で導入されました。

QModelRoleDataSpan およびdata()も参照してください 。

[pure virtual invokable] QModelIndex QAbstractItemModel::parent(const QModelIndex &index) const

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

ツリーデータ構造を公開するモデルで一般的に用いられる規約として、最初の列にある項目のみが子を持つというルールがあります。その場合、サブクラスでこの関数を再実装する際、返されるQModelIndex の列は0になります。

サブクラスでこの関数を再実装する際は、QModelIndex::parent() などのQModelIndex メンバ関数を呼び出さないよう注意してください。自身のモデルに属するインデックスが単に自身の実装を呼び出してしまい、無限再帰を引き起こす恐れがあるためです。

注:この関数は 、メタオブジェクトシステムや QML から呼び出すことができます。Q_INVOKABLE を参照してください。

createIndex()も参照してください 。

[protected] QModelIndexList QAbstractItemModel::persistentIndexList() const

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

[invokable] bool QAbstractItemModel::removeColumn(int column, const QModelIndex &parent = QModelIndex())

指定されたparent の子項目から、指定されたcolumn を削除します。

列が削除された場合はtrue を返し、そうでない場合はfalse を返します。

注:この関数は 、メタオブジェクトシステムを介して、およびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: removeColumns()、removeRow()、およびinsertColumn()。

[virtual invokable] bool QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())

これをサポートするモデルにおいて、親parent の下にある、指定されたcolumn で始まるcount 列をモデルから削除します。

列が正常に削除された場合は `true ` を返し、そうでない場合は `false` を返します。

基底クラスの実装は何も行わず、false を返します。

独自のモデルを実装する場合、削除をサポートしたいときはこの関数を再実装できます。あるいは、データを変更するための独自のAPIを提供することもできます。

注:この関数は 、メタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

removeColumn()、removeRows()、insertColumns()、beginRemoveColumns()、およびendRemoveColumns()も参照してください 。

[invokable] bool QAbstractItemModel::removeRow(int row, const QModelIndex &parent = QModelIndex())

指定された `parent ` の子アイテムから、指定された `row ` を削除します。

行が削除された場合はtrue を返し、そうでない場合はfalse を返します。

これは、removeRows() を呼び出すための便宜的な関数です。QAbstractItemModel におけるremoveRows() の実装は、何もしません。

注:この関数は 、メタオブジェクトシステムを介して、およびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: removeRows()、removeColumn()、およびinsertRow()。

[virtual invokable] bool QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())

これをサポートするモデルにおいて、親parent の下にある、指定されたrow で始まるcount 行をモデルから削除します。

行の削除に成功した場合は `true ` を返し、失敗した場合は `false` を返します。

基底クラスの実装は何も行わず、false を返します。

独自のモデルを実装する場合、削除機能をサポートしたいときはこの関数を再実装できます。あるいは、データを変更するための独自のAPIを提供することも可能です。

注:この関数は 、メタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

removeRow()、removeColumns()、insertColumns()、beginRemoveRows()、およびendRemoveRows()も参照してください 。

[virtual protected slot] void QAbstractItemModel::resetInternalData()

このスロットは、モデルのリセット中にモデルの内部データがクリアされた直後に呼び出されます。

このスロットは、QSortFilterProxyModel のサブクラスなど、追加データを保持する具体的なプロキシモデルのサブクラスに利便性を提供するために用意されています。

class CustomDataProxy : public QSortFilterProxyModel
{
    Q_OBJECT
public:
    CustomDataProxy(QObject *parent)
      : QSortFilterProxyModel(parent)
    {
    }

    //...

    QVariant data(const QModelIndex &index, int role) const override
    {
        if (role != Qt::BackgroundRole)
            return QSortFilterProxyModel::data(index, role);

        if (m_customData.contains(index.row()))
            return m_customData.value(index.row());
        return QSortFilterProxyModel::data(index, role);
    }

private slots:
    void resetInternalData()
    {
        m_customData.clear();
    }

private:
  QHash<int, QVariant> m_customData;
};

注: ミスにより 、Qt 5.0 ではこのスロットが存在しません。

関連項目: modelAboutToBeReset() およびmodelReset()。

[virtual slot] void QAbstractItemModel::revert()

モデルに対して、キャッシュされた情報を破棄すべきであることを通知します。この関数は通常、行の編集に使用されます。

submit()も参照してください 。

[virtual] QHash<int, QByteArray> QAbstractItemModel::roleNames() const

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

Qt で設定されているデフォルトのロール名は次のとおりです:

Qt ロールQMLのロール名
Qt::DisplayRoledisplay
Qt::DecorationRoledecoration
Qt::EditRoleedit
Qt::ToolTipRoleツールチップ
Qt::StatusTipRolestatusTip
Qt::WhatsThisRolewhatsThis

[pure virtual invokable] int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const

指定されたparent の下にある行の数を返します。親が有効な場合、rowCountは親の子要素の数を返します。

注: テーブルベースのモデルを実装する場合 、親が有効なときは rowCount() は 0 を返す必要があります。

注:この関数は 、メタオブジェクトシステムおよびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

columnCount()も参照してください 。

[private signal] void QAbstractItemModel::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)

このシグナルは、行がモデルに挿入される直前に発火します。新しい項目は、指定されたparent 項目の下、start とend (これらを含む)の間に配置されます。

注: このシグナルに接続されたコンポーネントは 、モデルの寸法変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコードでは明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発火させることはできません。

関連項目: insertRows() およびbeginInsertRows()。

[private signal] void QAbstractItemModel::rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)

このシグナルは、モデル内で行が移動される直前に発火します。移動対象となるのは、指定されたsourceParent 項目の下にある、sourceStart からsourceEnd までの範囲(両端を含む)の項目です。これらは、行destinationRow から始まるdestinationParent へ移動されます。

注:このシグナルに接続されたコンポーネントは、モデルの寸法変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコード内で明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発行することはできません。

関連項目: beginMoveRows()。

[private signal] void QAbstractItemModel::rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last)

このシグナルは、モデルから行が削除される直前に発火します。削除される項目は、指定されたparent 項目の下にある、first からlast までの範囲(両端を含む)の項目です。

注: このシグナルに接続されたコンポーネントは 、モデルの次元の変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコードから明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続では使用できますが、ユーザーが発行することはできません。

関連項目: removeRows() およびbeginRemoveRows()。

[private signal] void QAbstractItemModel::rowsInserted(const QModelIndex &parent, int first, int last)

このシグナルは、モデルに行が挿入された後に発火します。新しい項目は、指定されたparent 項目の下にある、first からlast までの範囲(両端を含む)のものとなります。

注: このシグナルに接続されたコンポーネントは 、モデルの次元の変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコードから明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発火させることはできません。

関連項目: insertRows() およびbeginInsertRows()。

[private signal] void QAbstractItemModel::rowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)

このシグナルは、モデル内で行が移動された後に発信されます。指定されたsourceParent 項目の下にある、sourceStart からsourceEnd までの項目(両端を含む)が、行destinationRow から始まるdestinationParent に移動されました。

注:このシグナルに接続されたコンポーネントは、モデルの寸法変更に対応するためにこのシグナルを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコード内で明示的に発火させることはできません。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発行することはできません。

関連項目: beginMoveRows()。

[private signal] void QAbstractItemModel::rowsRemoved(const QModelIndex &parent, int first, int last)

このシグナルは、モデルから行が削除された後に発火します。削除されるのは、指定されたparent 項目の下にある、first からlast までの範囲(両端を含む)の項目です。

注: このシグナルに接続されたコンポーネントは 、モデルの次元の変更に対応するためにこれを使用します。このシグナルはQAbstractItemModel の実装によってのみ発火され、サブクラスのコード内で明示的に発火することはできません。

注:これは プライベートシグナルです。シグナル接続では使用できますが、ユーザーが発行することはできません。

関連項目: removeRows() およびbeginRemoveRows()。

[virtual invokable] bool QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)

index にある項目のrole データをvalue に設定します。

成功した場合はtrue を返し、そうでない場合はfalse を返します。

データの設定に成功した場合は、dataChanged() シグナルを発火させる必要があります。

基底クラスの実装はfalse を返します。編集可能なモデルでは、この関数とdata() を再実装する必要があります。

注:この関数は 、メタオブジェクトシステムを介して、およびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: Qt::ItemDataRole 、data()、およびitemData()。

[virtual] bool QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)

指定されたorientation を持つヘッダー内の、指定されたrole およびsection のデータを、指定されたvalue に設定します。

ヘッダーのデータが更新された場合はtrue を返し、そうでない場合はfalse を返します。

この関数を再実装する場合、headerDataChanged() シグナルを明示的に発火させる必要があります。

Qt::ItemDataRole およびheaderData()も参照してください 。

[virtual] bool QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)

index にある項目のロールデータを、roles 内の関連付けられた値に設定します。これは、Qt::ItemDataRole ごとに実行されます。

成功した場合はtrue を返し、失敗した場合はfalse を返します。

roles に含まれていないロールは変更されません。

setData()、data()、およびitemData()も参照してください 。

[virtual invokable] QModelIndex QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const

index にあるアイテムについて、row およびcolumn にある兄弟要素を返します。その位置に兄弟要素が存在しない場合は、無効なQModelIndex を返します。

sibling() は、項目の親を検索し、それを用いて指定されたrow およびcolumn にある子項目のインデックスを取得する、単なる利便性のための関数です。

このメソッドは、実装固有の最適化のためにオプションでオーバーライドすることができます。

注:この関数は 、メタオブジェクトシステムを介して、また QML から呼び出すことができます。Q_INVOKABLE を参照してください。

関連項目: index()、QModelIndex::row()、およびQModelIndex::column()。

[virtual invokable] void QAbstractItemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)

指定されたorder 内のcolumn に基づいてモデルをソートします。

基底クラスの実装では何も行いません。

注:この関数は 、メタオブジェクトシステムを介して、またはQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

[virtual] QSize QAbstractItemModel::span(const QModelIndex &index) const

index で表される項目の行および列の範囲を返します。

注:現在 、span は使用されていません。

[virtual slot] bool QAbstractItemModel::submit()

モデルに対し、キャッシュされた情報を永続ストレージに書き込むよう指示します。この関数は通常、行の編集に使用されます。

エラーがない場合は `true ` を返し、エラーがある場合は `false` を返します。

revert()も参照してください 。

[virtual] Qt::DropActions QAbstractItemModel::supportedDragActions() const

このモデルのデータでサポートされているアクションを返します。

デフォルトの実装では、supportedDropActions() を返します。追加のアクションをサポートしたい場合は、この関数を再実装してください。

supportedDragActions() は、ドラッグが発生した際にQAbstractItemView::startDrag() によってデフォルト値として使用されます。

「 Qt::DropActions 」 および「アイテムビューでのドラッグ&ドロップの使用」も参照してください 。

[virtual] Qt::DropActions QAbstractItemModel::supportedDropActions() const

このモデルでサポートされているドロップアクションを返します。

デフォルトの実装では、Qt::CopyAction を返します。追加のアクションをサポートしたい場合は、この関数を再実装してください。また、追加の操作を処理するために、dropMimeData() 関数も再実装する必要があります。

dropMimeData()、Qt::DropActions 、および「アイテムビューでのドラッグ&ドロップの使用」も参照してください 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.