QAbstractItemModel Class
QAbstractItemModel クラスは、アイテムモデルクラスの抽象インターフェースを提供します。詳細...
ヘッダー | #include <QAbstractItemModel> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
を継承する: | QObject |
によって継承される: | QAbstractItemModelReplica QAbstractListModel, , , , , , , andQAbstractProxyModel QAbstractTableModel QConcatenateTablesProxyModel QFileSystemModel QHelpContentModel QPdfBookmarkModel 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 |
パブリックスロット
シグナル
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() |
詳細説明
QAbstractItemModel クラスは、アイテムモデルがモデル/ビューアーキテクチャの他のコンポーネントと相互運用するために使用しなければならない標準インターフェースを定義しています。これは直接インスタンス化されることは想定されていません。代わりに、新しいモデルを作成するためにサブクラスを作成する必要があります。
QAbstractItemModel クラスはモデル/ビュー・クラスの一つで、Qt のモデル/ビュー・フレームワークの一部です。QMLのアイテムビュー要素や、Qt Widgets モジュールのアイテムビュークラスの基礎となるデータモデルとして使用することができます。
QML の List View 要素や C++ のウィジェットQListView やQTableView のようなアイテムビューで使うモデルが必要な場合は、このクラスの代わりにQAbstractListModel やQAbstractTableModel をサブクラス化することを検討してください。
基本的なデータモデルはテーブルの階層としてビューやデリゲートに公開されます。階層を利用しない場合、モデルは行と列の単純なテーブルとなります。各項目は、QModelIndex で指定された一意のインデックスを持っています。
モデルを介してアクセスできる全てのデータ項目は、関連するモデルインデックスを持ちます。このモデル・インデックスは、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() を使用します。
サブクラスの作成
注 : モデルをサブクラス化するための一般的なガイドラインは、「Model Subclassing Reference」にあります。
QAbstractItemModel をサブクラス化する際には、少なくともindex(),parent(),rowCount(),columnCount(),data() を実装する必要があります。これらの関数は、すべての読み取り専用モデルで使用され、編集可能モデルの基礎を形成します。
また、rowCount()の実装が高価なモデルのために、hasChildren()を再実装して特別な動作を提供することもできます。これにより、モデルはビューから要求されるデータ量を制限することができるようになり、モデルデータのレイジーポピュレーションを実装する方法として使用することができます。
モデルの編集を可能にするには、setData ()を実装し、flags ()を再実装して、ItemIsEditable
が返されるようにする必要があります。また、headerData ()とsetHeaderData ()を再実装して、モデルのヘッダーの表示方法を制御することもできます。
dataChanged() とheaderDataChanged() シグナルは、それぞれsetData() とsetHeaderData() 関数を再実装する際に明示的に発せられなければならない。
カスタムモデルは、他のコンポーネントが使用するためのモデルインデックスを作成する必要があります。これを行うには、createIndex() を、項目の行番号と列番号、および識別子(ポインタまたは整数値)を指定して呼び出します。これらの値の組み合わせは、各項目で一意でなければなりません。カスタムモデルでは通常、アイテムのデータを取得したり、アイテムの親や子に関する情報にアクセスしたりするために、他の再実装関数でこれらの一意な識別子を使用します。一意な識別子の詳細については、単純なツリーモデルの例を参照してください。
Qt::ItemDataRole で定義されているすべてのロールをサポートする必要はありません。モデル内に含まれるデータの種類によっては、より一般的なロールのいくつかに対して有効な情報を返すためにdata() 関数を実装することだけが有用な場合もあります。ほとんどのモデルは、Qt::DisplayRole に対して少なくとも項目データのテキスト表現を提供し、行儀の良いモデルはQt::ToolTipRole とQt::WhatsThisRole に対しても有効な情報を提供するはずです。これらの役割をサポートすることで、モデルを標準的なQtビューで使用することができます。しかし、高度に特殊化されたデータを扱うモデルの中には、ユーザー定義のロールにのみデータを提供することが適切なものもあります。
リサイズ可能なデータ構造へのインタフェースを提供するモデルは、insertRows ()、removeRows ()、insertColumns ()、removeColumns ()の実装を提供することができます。これらの関数を実装する場合、モデルのディメンジョンの変更が発生する前と 後の両方で、接続されているビューに 変更を通知することが重要です:
- insertRows() の実装では、データ構造に新しい行を挿入する前に beginInsertRows() を呼び出し、その直後に endInsertRows() を呼び出す必要があります。
- insertColumns() の実装では、データ構造に新しい列を挿入する前に beginInsertColumns() を呼び出し、その直後に endInsertColumns() を呼び出さなければならない。
- removeRows() の実装では、データ構造から行が削除される前に beginRemoveRows() を呼び出し、その直後に endRemoveRows() を呼び出さなければならない。
- removeColumns() の実装では、データ構造から列が削除される前に beginRemoveColumns() を呼び出し、その直後に endRemoveColumns() を呼び出さなければならない。
これらの関数が発するプライベート・シグナルは、どのデータも利用できなくなる前に、接続されたコンポーネントがアクションを起こす機会を与える。これらのbegin関数とend関数で挿入と削除の操作をカプセル化することで、モデルがpersistent model indexes 。選択を適切に処理したい場合は、これらの関数を確実に呼び出す必要があります。子項目を持つ項目を挿入または削除する場合、子項目に対してこれらの関数を呼び出す必要はありません。つまり、親アイテムが子アイテムの処理を行います。
インクリメンタルに入力するモデルを作成するには、fetchMore() とcanFetchMore() を再実装します。fetchMore() を再実装してモデルに行を追加する場合は、beginInsertRows() とendInsertRows() を呼び出す必要があります。
スレッドの安全性
QObject のサブクラスである QAbstractItemModel はthread-safe ではありません。QAbstractItemModel のモデル関連の API は、モデルオブジェクトが存在するスレッドからのみ呼び出される必要があります。QAbstractItemModel がビューと接続されている場合、それは GUI スレッドを意味します。バックグラウンドスレッドを使用してモデルの内容を入力したり変更したりすることは可能ですが、バックグラウンドスレッドはモデル関連の API を直接呼び出すことができないため、注意が必要です。その代わりに、更新をキューに入れ、メインスレッドで適用する必要があります。これはキュー接続で行うことができます。
モデルクラス,モデルのサブクラスリファレンス,QModelIndex,QAbstractItemView,アイテムビューでのドラッグ&ドロップの使用,シンプルなツリーモデルの例,編集可能なツリーモデルの例,Fetch Moreの例も参照してください 。
メンバ型のドキュメント
enum class QAbstractItemModel::CheckIndexOption
flags QAbstractItemModel::CheckIndexOptions
この enum は、QAbstractItemModel::checkIndex() によって実行されるチェックを制御するために使用することができます。
定数 | 値 | 説明 |
---|---|---|
QAbstractItemModel::CheckIndexOption::NoOption | 0x0000 | チェックオプションは指定されません。 |
QAbstractItemModel::CheckIndexOption::IndexIsValid | 0x0001 | QAbstractItemModel::checkIndex() に渡されたモデル・インデックスが有効なモデル・インデックスであるかどうかがチェックされます。 |
QAbstractItemModel::CheckIndexOption::DoNotUseParent | 0x0002 | QAbstractItemModel::checkIndex() に渡されたインデックスの親の使用に関するチェックを行いません。 |
QAbstractItemModel::CheckIndexOption::ParentIsInvalid | 0x0004 | QAbstractItemModel::checkIndex() に渡されたモデル・インデックスの親が無効なモデル・インデックスであることをチェックする。このオプションと DoNotUseParent の両方が指定されている場合、このオプションは無視されます。 |
CheckIndexOptions 型は、QFlags<CheckIndexOption> の typedef です。CheckIndexOption 値の OR の組み合わせを格納します。
enum QAbstractItemModel::LayoutChangeHint
この列挙型は、モデルがレイアウトを変更する方法を記述します。
定数 | 値 | 説明 |
---|---|---|
QAbstractItemModel::NoLayoutChangeHint | 0 | ヒントはありません。 |
QAbstractItemModel::VerticalSortHint | 1 | 行はソートされています。 |
QAbstractItemModel::HorizontalSortHint | 2 | 列はソートされています。 |
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列目の前に3列挿入するので、first は4、last は6となります: beginInsertColumns(parent, 4, 6); これにより、3つの新しいカラムがカラム4、5、6として挿入されます。 |
![]() | カラムを追加するには、最後のカラムの後に挿入する。 例えば、図に示すように、既存の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行挿入するので、first は 2、last は 4 となります: beginInsertRows(parent, 2, 4); これにより、3つの新しい行が2行目、3行目、4行目として挿入されます。 |
![]() | 行を追加するには、最後の行の後に行を挿入する。 例えば、図のように、既存の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行目の3行が移動先では2行目、3行目、4行目となる。影響を受ける他の兄弟は、それに応じて移動される。 |
![]() | 行を別の親に追加するには、最後の行の後に移動させます。 例えば、図に示すように、3行を6行の既存の行の集合(5行目で終わる)に移動させるので、destinationChild は6となる: beginMoveRows(sourceParent, 2, 4, destinationParent, 6); これにより、対象の行は6、7、8として対象の親の最後に移動します。 |
![]() | 同じ親内の行を移動するには、移動先の行を指定します。 例えば図のように、2行目から0行目へ1つ移動させるので、sourceFirst とsourceLast は2となり、destinationChild は0となる。 beginMoveRows(parent, 2, 2, parent, 0); それに応じて他の行も移動する可能性があることに注意。また、同じ親の中で項目を移動する場合、無効な移動やノーオペの移動を試みてはならないことに注意。上の例では、アイテム2は移動前は2行目にあるため、2行目(すでにある行)や3行目(3行目はすでにある3行目の上という意味で無効)には移動できない。 |
![]() | 同じ親の中にある行を移動するには、移動先の行を指定します。 例えば、図のように、2行目から4行目へ1つ移動させるので、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列目から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行を削除するので、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() の中にあるかどうかだけをチェックします。
row 、column 、parent 、action でdata を削除できるかどうかをテストしたい場合は、カスタムモデルでこの関数を再実装してください。 このテストが必要ない場合は、この関数を再実装する必要はありません。
dropMimeData() およびUsing drag and drop with item viewsも参照して ください。
[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
である; - index'の行が0以上である;
- インデックスの行がインデックスの親の行数より小さい;
- インデックスの列がゼロより大きいか等しい;
- index'の列がindex'の親の列数より小さい。
options 引数は、これらのチェックの一部を変更する可能性がある。options にIndexIsValid
が含まれている場合、index は有効なインデックスでなければならない。これは、有効なインデックスを期待するdata() やsetData() などの関数を再実装するときに便利である。
options にDoNotUseParent
が含まれている場合、parent()を呼び出すためのチェックは省略される。これにより、parent()の再実装からこの関数を呼び出すことができる(そうでない場合、無限の再帰とクラッシュが発生する)。
options がDoNotUseParent
を含まず、ParentIsInvalid
を含む場合、追加のチェックが行われる: 親インデックスが有効でないかどうかがチェックされる。これは、リストやテーブルのような平坦なモデルを実装するときに便利です。
この関数は、すべてのチェックが成功した場合は真を返し、そうでない場合は偽を返します。これにより、この関数を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)
このシグナルはカラムがモデルに挿入される直前に発せられます。新しい項目は、first とlast の間に、指定されたparent 項目の下に配置されます。
注意: このシグナルに接続されたコンポーネントは、モデルの寸法の変更に適応するためにこのシグナルを使用します。このシグナルは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)
このシグナルはカラムがモデルに挿入された後に発行されます。新しい項目とは、first からlast までの項目で、指定されたparent 項目の下にあるものです。
注意: このシグナルに接続されたコンポーネントは、モデルの次元の変更に適応するためにこのシグナルを使用します。このシグナルは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)
このシグナルはモデルからカラムが削除された後に発行されます。削除される項目は、first からlast までの項目で、指定されたparent 項目の下にあるものです。
注意: このシグナルに接続されたコンポーネントは、モデルの次元の変更に適応するためにこのシグナルを使用します。このシグナルはQAbstractItemModel の実装によってのみ発することができ、サブクラスのコードで明示的に発することはできません。
注意: これはプライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発することはできません。
removeColumns() およびbeginRemoveColumns()も参照してください 。
[protected]
QModelIndex QAbstractItemModel::createIndex(int row, int column, const void *ptr = nullptr) const
内部ポインタptr で、与えられたrow とcolumn のモデルインデックスを作成します。
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 の下に格納されているデータを返す。
注意: 返すべき値がない場合は、無効な(default-constructed)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 タイプを 1 つ返すmimeTypes() を想定している。カスタムモデルでmimeTypes() を再実装して複数の MIME タイプを返すようにする場合は、 この関数を再実装してそれらを利用する必要があります。
supportedDropActions(),canDropMimeData(), およびUsing drag and drop with item viewsも参照してください 。
[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
モデルがrow とcolumn に対して有効なQModelIndex を返した場合はtrue
を、parent を返した場合はfalse
を返します。
注意: この関数はメタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。
[virtual invokable]
QVariant QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
指定されたorientation のヘッダー内の、指定されたrole とsection のデータを返す。
水平ヘッダーの場合、セクション番号は列番号に対応する。同様に、縦書きヘッダーの場合、セクション番号は行番号に対応する。
注: この関数はメタオブジェクトシステムや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())
指定されたparent の子項目で、指定されたcolumn の前に 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())
指定されたparent の子項目で、指定されたrow の前に 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() を発行する前に、永続的なモデルのインデックスを更新する必要があります。言い換えれば、構造が変更されたときに
- emitlayoutAboutToBeChanged
- 変更されるQModelIndex を覚えておく
- 内部データを更新する
- changePersistentIndex() を呼び出します。
- レイアウト変更
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
与えられたrole の下に格納されているデータが、指定されたvalue と一致するstart インデックスの列の項目のインデックスのリストを返す。検索の実行方法は、指定されたflags で定義されます。返されるリストは空でもかまいません。また、例えばプロキシモデルが使用されている場合、リスト内の結果の順序はモデル内の順序と一致しない可能性があることに注意してください。結果の順序は当てになりません。
検索はstart インデックスから開始され、一致するデータ項目の数がhits に等しくなるまで、あるいは検索が最後の行に達するまで、あるいは検索が再びstart に達するまで続けられます -MatchWrap
がflags で指定されているかどうかによって異なります。 一致するすべての項目を検索したい場合は、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)
これをサポートするモデルでは、与えられたsourceColumn で始まる親sourceParent の下のcount 列を、親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)
これをサポートするモデルでは、与えられたsourceRow で始まる行を、親sourceParent の下にある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
の情報を取得するために必要なデータ構造へのアクセスが一度だけで済むことを意味します(関連するコードをループの外に出す)。
QModelRoleData::setData ()、または同様にQVariant::setValue ()の使用は、QVariant を個別に構築したり、単純な代入演算子を使用するよりも推奨されます。これは、前者がQModelRoleData 内に格納されたQVariant オブジェクトのために既に割り当てられたメモリを再利用できるのに対し、後者は常に新しいバリアントを割り当て、古いバリアントを破棄するためです。
ビューは、以前の呼び出しで使用されたスパンでmultiData()を呼び出す可能性があり、したがって、すでにいくつかのデータを含んでいる可能性があることに注意してください。したがって、モデルが与えられたロールのデータを返すことができない場合、対応するQModelRoleData オブジェクトのデータをクリアする必要があります。これは、QModelRoleData::clearData()を呼び出すことによって行うことができます。また、同様に、QVariant などで構築されたデフォルトを設定することによって行うこともできます。データのクリアに失敗すると、ビューは "古い "データが対応するロールに使用されるものだと思い込むことになります。
最後に、コードの重複を避けるために、サブクラスはmultiData()の観点からdata()を再実装することもできます:
QVariant MyModel::data(const QModelIndex &index, int role) const { QModelRoleData roleData(role); multiData(index, roleData); return roleData.data(); }
注意: モデルは、スパン内のロールを変更したり、スパン要素を並べ替えたりすることはできません。これを行うと、未定義の動作になります。
注 : この関数に無効なモデル・インデックスを渡すことは違法です。
この関数は 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() を呼び出す便利な関数である。removeRows() のQAbstractItemModel 実装は何もしません。
注意: この関数はメタオブジェクトシステムや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) 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::DisplayRole | 表示 |
Qt::DecorationRole | 装飾 |
Qt::EditRole | 編集 |
Qt::ToolTipRole | ツールチップ |
Qt::StatusTipRole | ステータスヒント |
Qt::WhatsThisRole | 何これ |
[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)
このシグナルは、行がモデルに挿入される直前に発せられます。新しい項目は、start とend の間、指定されたparent 項目の下に配置されます。
注: このシグナルに接続されたコンポーネントは、モデルの寸法の変更に適応するためにこのシグナルを使用します。このシグナルは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)
このシグナルは、行がモデルに挿入された後に発行される。新しい項目とは、first からlast までの項目で、指定されたparent 項目の下にあるものです。
注: このシグナルに接続されたコンポーネントは、モデルの次元の変更に適応するためにこのシグナルを使用します。このシグナルは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)
このシグナルは、モデルから行が削除された後に発行される。削除される項目は、first からlast までの項目で、指定されたparent 項目の下にあるものです。
注: このシグナルに接続されたコンポーネントは、モデルの次元の変更に適応するためにこのシグナルを使用します。このシグナルは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)
Qt::ItemDataRole 毎に、index の項目のロールデータをroles の関連値に設定する。
成功した場合は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 およびUsing drag and drop with item viewsも参照してください 。
[virtual]
Qt::DropActions QAbstractItemModel::supportedDropActions() const
このモデルがサポートするドロップアクションを返します。
デフォルトの実装はQt::CopyAction を返します。追加のアクションをサポートしたい場合は、この関数を再実装します。また、dropMimeData() 関数を再実装して、追加操作を処理する必要があります。
dropMimeData()、Qt::DropActions 、およびUsing drag and drop with item viewsも参照してください 。
© 2025 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.