QDataWidgetMapper Class
QDataWidgetMapperクラスは、データモデルのセクションとウィジェットの間のマッピングを提供します。詳細...
ヘッダー | #include <QDataWidgetMapper> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
継承: | QObject |
パブリックな型
enum | SubmitPolicy { AutoSubmit, ManualSubmit } |
プロパティ
- currentIndex : int
- orientation : Qt::Orientation
- submitPolicy : SubmitPolicy
パブリック機能
QDataWidgetMapper(QObject *parent = nullptr) | |
virtual | ~QDataWidgetMapper() |
void | addMapping(QWidget *widget, int section) |
void | addMapping(QWidget *widget, int section, const QByteArray &propertyName) |
void | clearMapping() |
int | currentIndex() const |
QAbstractItemDelegate * | itemDelegate() const |
QByteArray | mappedPropertyName(QWidget *widget) const |
int | mappedSection(QWidget *widget) const |
QWidget * | mappedWidgetAt(int section) const |
QAbstractItemModel * | model() const |
Qt::Orientation | orientation() const |
void | removeMapping(QWidget *widget) |
QModelIndex | rootIndex() const |
void | setItemDelegate(QAbstractItemDelegate *delegate) |
void | setModel(QAbstractItemModel *model) |
void | setOrientation(Qt::Orientation aOrientation) |
void | setRootIndex(const QModelIndex &index) |
void | setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy) |
QDataWidgetMapper::SubmitPolicy | submitPolicy() const |
パブリックスロット
void | revert() |
virtual void | setCurrentIndex(int index) |
void | setCurrentModelIndex(const QModelIndex &index) |
bool | submit() |
void | toFirst() |
void | toLast() |
void | toNext() |
void | toPrevious() |
シグナル
void | currentIndexChanged(int index) |
詳しい説明
QDataWidgetMapper は、アイテムモデルのセクションにマッピングすることで、データウェアウィジェットを作成するために使用することができます。セクションは、水平方向(デフォルト)であればモデルの列であり、そうでなければ行です。
現在のインデックスが変更されるたびに、各ウィジェットは、マッピング時に指定されたプロパティを経由して、モデルからのデータで更新されます。ユーザがウィジェットの内容を編集すると、同じプロパティを使って変更が読み込まれ、モデルに書き戻されます。デフォルトでは、各ウィジェットのuser property は、モデルとウィジェット間のデータ転送に使用されます。Qt 4.3 以降では、addMapping() 関数が追加され、デフォルトのユーザ・プロパティの代わりに名前付きプロパティを使用できるようになりました。
カスタムウィジェットをサポートするために、アイテムデリゲートを設定することも可能です。デフォルトでは、QStyledItemDelegate がモデルとウィジェットの同期に使用されます。
model
という名前のアイテムモデルがあり、以下のような内容になっているとします:
1 | Qt ノルウェー | オスロ |
2 | Qt オーストラリア | ブリスベン |
3 | Qtアメリカ | パロアルト |
4 | 中国 | 北京 |
5 | Qt ドイツ | ベルリン |
次のコードは、モデルのカラムをmySpinBox
、myLineEdit
、myCountryChooser
というウィジェットにマッピングします:
QDataWidgetMapper *mapper = new QDataWidgetMapper; mapper->setModel(model); mapper->addMapping(mySpinBox, 0); mapper->addMapping(myLineEdit, 1); mapper->addMapping(myCountryChooser, 2); mapper->toFirst();
toFirst() の呼び出しの後、mySpinBox
は値1
を表示し、myLineEdit
はQt Norway
を表示し、myCountryChooser
はOslo
を表示します。ナビゲーショ ン関数toFirst(),toNext(),toPrevious(),toLast(),setCurrentIndex() を使用して、モデル内をナビゲートし、モデルの内容でウィジェットを更新することができます。
setRootIndex() 関数は、モデル内の特定のアイテムをルートインデックスとして指定することを可能にします - このアイテムの子は、ユーザーインターフェイスの関連するウィジェットにマッピングされます。
QDataWidgetMapper は、AutoSubmit
とManualSubmit
の2つのサブミットポリシーをサポートしています。AutoSubmit
は、現在のウィジェットがフォーカスを失うとすぐにモデルを更新します。ManualSubmit
は、submit() が呼び出されない限り、モデルを更新しません。ManualSubmit
は、ユーザが全ての変更をキャンセルできるダイアログを表示する場合に便利です。また、モデルを表示する他のビューは、ユーザがすべての修正を終えてサブミットするまで更新されません。
QDataWidgetMapperは外部からの変更を追跡することに注意してください。モデルの内容がアプリケーションの他のモジュールで更新された場合、ウィジェットも更新されます。
QAbstractItemModel およびQAbstractItemDelegateも参照してください 。
メンバ型ドキュメント
enum QDataWidgetMapper::SubmitPolicy
この列挙型は、QDataWidgetMapper がサポートするサブミットポリシーを記述します。
定数 | 値 | 説明 |
---|---|---|
QDataWidgetMapper::AutoSubmit | 0 | ウィジェットがフォーカスを失うたびに、ウィジェットの現在値がアイテムモデルに設定されます。 |
QDataWidgetMapper::ManualSubmit | 1 | submit() が呼び出されるまで、モデルは更新されません。 |
プロパティの説明
currentIndex : int
このプロパティは、現在の行または列を保持します。
ウィジェットは、オリエンテーションが水平(デフォルト)の場合、index にある行のデータが入力され、そうでない場合、index にある列のデータが入力されます。
アクセス関数
int | currentIndex() const |
virtual void | setCurrentIndex(int index) |
通知シグナル:
void | currentIndexChanged(int index) |
setCurrentModelIndex(),toFirst(),toNext(),toPrevious(),toLast()も参照のこと 。
orientation : Qt::Orientation
このプロパティは、モデルの向きを保持します。
Orientation がQt::Horizontal (デフォルト) の場合、ウィジェットはデータモデルの列にマッピングされます。ウィジェットは、マップされた列とcurrentIndex() が指す行からモデルのデータを入力します。
次のような表形式のデータには、Qt::Horizontal を使います:
1 | Qt ノルウェー | オスロ |
2 | Qtオーストラリア | ブリスベン |
3 | Qtアメリカ | シリコンバレー |
4 | 中国 | 北京 |
5 | Qtドイツ | ベルリン |
Orientation がQt::Vertical に設定されている場合、ウィジェットは行にマッピングされます。setCurrentIndex() を呼び出すと、現在の列が変更されます。ウィジェットは、マップされた行とcurrentIndex() が指す列から、モデルのデータを入力します。
以下のような表形式のデータには、Qt::Vertical を使用します:
1 | 2 | 3 | 4 | 5 |
Qt ノルウェー | オーストラリア | Qtアメリカ | Qt中国 | ドイツ |
オスロ | ブリスベン | シリコンバレー | 北京 | ベルリン |
方向を変更すると、既存のマッピングはすべてクリアされます。
アクセス関数
Qt::Orientation | orientation() const |
void | setOrientation(Qt::Orientation aOrientation) |
submitPolicy : SubmitPolicy
このプロパティは現在のサブミットポリシーを保持します。
現在のサブミットポリシーを変更すると、すべてのウィジェットはモデルからの現在のデータに戻ります。
関数にアクセスします:
QDataWidgetMapper::SubmitPolicy | submitPolicy() const |
void | setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy) |
メンバー関数ドキュメント
[explicit]
QDataWidgetMapper::QDataWidgetMapper(QObject *parent = nullptr)
親オブジェクトparent を持つ新しいQDataWidgetMapperを構築します。デフォルトでは、方向は水平で、サブミットポリシーはAutoSubmit
です。
setOrientation() およびsetSubmitPolicy()も参照してください 。
[virtual noexcept]
QDataWidgetMapper::~QDataWidgetMapper()
オブジェクトを破壊する。
void QDataWidgetMapper::addMapping(QWidget *widget, int section)
モデルからwidget とsection の間のマッピングを追加します。section は、水平方向(デフォルト)であればモデルの列であり、そうでなければ行です。
次の例では、2つの列を持つモデルmyModel
を想定します:最初の列はグループの人々の名前を含み、2番目の列は彼らの年齢を含みます。最初の列はQLineEdit nameLineEdit
にマップされ、2番目の列はQSpinBox ageSpinBox
にマップされる:
QDataWidgetMapper *mapper = new QDataWidgetMapper; mapper->setModel(myModel); mapper->addMapping(nameLineEdit, 0); mapper->addMapping(ageSpinBox, 1);
注意事項
- widget がすでにセクションにマッピングされている場合、古いマッピングは新しいマッピングに置き換えられます。
- セクションとウィジェットのマッピングは1対1のみ可能です。1つのセクションを複数のウィジェットにマッピングすることや、1つのウィジェットを複数のセクションにマッピングすることはできません。
removeMapping(),mappedSection(),clearMapping()も参照のこと 。
void QDataWidgetMapper::addMapping(QWidget *widget, int section, const QByteArray &propertyName)
基本的には addMapping() と同じですが、propertyName を指定して使用するプロパティを指定する可能性が追加されています。
addMapping()も参照 。
void QDataWidgetMapper::clearMapping()
すべてのマッピングをクリアする。
addMapping() およびremoveMapping()も参照 。
[signal]
void QDataWidgetMapper::currentIndexChanged(int index)
このシグナルは、現在のインデックスが変更され、すべてのウィジェットに新しいデータが入力された後に発行されます。index は、新しい現在のインデックスです。
注: プロパティcurrentIndex に対するノーティファイア・シグナルです。
currentIndex() およびsetCurrentIndex()も参照してください 。
QAbstractItemDelegate *QDataWidgetMapper::itemDelegate() const
現在のアイテムデリゲートを返します。
setItemDelegate()も参照してください 。
QByteArray QDataWidgetMapper::mappedPropertyName(QWidget *widget) const
指定されたwidget にデータをマッピングする際に使用されるプロパティの名前を返します。
mappedSection()、addMapping() およびremoveMapping()も参照 。
int QDataWidgetMapper::mappedSection(QWidget *widget) const
widget がマップされているセクションを返すか、ウィジェットがマップされていない場合は -1 を返す。
addMapping() およびremoveMapping()も参照 。
QWidget *QDataWidgetMapper::mappedWidgetAt(int section) const
section にマップされたウィジェット、またはそのセクションにウィジェットがマップされていない場合は 0 を返す。
addMapping() およびremoveMapping()も参照 。
QAbstractItemModel *QDataWidgetMapper::model() const
現在のモデルを返します。
setModel()も参照してください 。
void QDataWidgetMapper::removeMapping(QWidget *widget)
与えられたwidget のマッピングを削除します。
addMapping() およびclearMapping()も参照 。
[slot]
void QDataWidgetMapper::revert()
すべてのウィジェットをモデルの現在のデータで再投入します。未提出の変更はすべて失われます。
submit() およびsetSubmitPolicy()も参照してください 。
QModelIndex QDataWidgetMapper::rootIndex() const
現在のルートインデックスを返す。
setRootIndex()も参照 。
[slot]
void QDataWidgetMapper::setCurrentModelIndex(const QModelIndex &index)
現在のインデックスを、横向き(デフォルト)の場合はindex の行に、そうでない場合はindex の列に設定する。
setCurrentIndex() を内部的に呼び出す。selection modelこの便宜スロットは、他のビューのシグナルcurrentRowChanged() またはcurrentColumnChanged() に接続することができます。
次の例は、myTableView
という名前のQTableView の選択が変更されるたびに、すべてのウィジェットを新しいデータで更新する方法を示しています:
QDataWidgetMapper *mapper = new QDataWidgetMapper; connect(myTableView->selectionModel(), &QItemSelectionModel::currentRowChanged, mapper, &QDataWidgetMapper::setCurrentModelIndex);
currentIndex()も参照してください 。
void QDataWidgetMapper::setItemDelegate(QAbstractItemDelegate *delegate)
アイテムデリゲートをdelegate に設定します。このデリゲートは、QAbstractItemDelegate::setEditorData() とQAbstractItemDelegate::setModelData() を使用して、モデルからウィジェットに、ウィジェットからモデルにデータを書き込むために使用されます。
QDataWidgetMapper はdelegate の所有権を持ちません。
デリゲートはまた、QAbstractItemDelegate::commitData() とQAbstractItemDelegate::closeEditor() を使用して、データを適用するタイミングとエディタを変更するタイミングを決定します。
警告 ウィジェットマッパーやビュー間でデリゲートの同じインスタンスを共有してはいけません。なぜなら、与えられたデリゲートに接続された各ビューがcloseEditor() シグナルを受信し、既に閉じられたエディタにアクセス、変更、または閉じようとするかもしれないからです。
itemDelegate()も参照してください 。
void QDataWidgetMapper::setModel(QAbstractItemModel *model)
現在のモデルをmodel に設定します。別のモデルが設定されていた場合、その古いモデルへのマッピングはすべてクリアされます。
model()も参照のこと 。
void QDataWidgetMapper::setRootIndex(const QModelIndex &index)
ルート項目をindex に設定します。 これは、ツリーの枝を表示するために使用できます。最上部の枝を表示するには、無効なモデル・インデックスを渡します。
rootIndex()も参照してください 。
[slot]
bool QDataWidgetMapper::submit()
マッピングされたウィジェットのすべての変更をモデルにサブミットします。
マッピングされたすべてのセクションに対して、アイテムデリゲートはウィジェットから現在の値を読み込み、モデルに設定します。最後に、モデルのsubmit() メソッドが呼び出されます。
すべての値が送信された場合はtrue
を返し、そうでない場合は false を返します。
注: データベースモデルの場合、QSqlQueryModel::lastError() は最後のエラーを取得するために使用できます。
revert() およびsetSubmitPolicy()も参照ください 。
[slot]
void QDataWidgetMapper::toFirst()
ウィジェットの向きが水平(デフォルト)の場合はモデルの最初の行のデータを、そうでない場合は最初の列のデータを入力します。
これはsetCurrentIndex(0)
を呼び出すのと同じです。
toLast() およびsetCurrentIndex()も参照 。
[slot]
void QDataWidgetMapper::toLast()
モデルの向きが水平(デフォルト)の場合は最後の行のデータを、そうでない場合は最後の列のデータをウィジェットに入力します。
内部的にsetCurrentIndex() を呼び出します。
toFirst() およびsetCurrentIndex()も参照してください 。
[slot]
void QDataWidgetMapper::toNext()
オリエンテーションが水平(デフォルト)の場合、モデルの次の行のデータをウィジェットに入力し、そうでない場合、次の列のデータをウィジェットに入力します。
内部的にsetCurrentIndex() を呼び出します。モデルに次の行がない場合は何もしません。
toPrevious() およびsetCurrentIndex()も参照してください 。
[slot]
void QDataWidgetMapper::toPrevious()
オリエンテーションが水平(デフォルト)の場合はモデルの前の行のデータを、そうでない場合は前の列のデータをウィジェットに入力します。
内部的にsetCurrentIndex() を呼び出します。モデルに前の行がない場合は何もしません。
toNext() およびsetCurrentIndex()も参照してください 。
© 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.