QAbstractItemDelegate Class
QAbstractItemDelegateクラスは、モデルのデータ項目を表示・編集するために使用します。詳細...
ヘッダー | #include <QAbstractItemDelegate> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
を継承する: | QObject |
によって継承される: |
パブリックな型
enum | EndEditHint { NoHint, EditNextItem, EditPreviousItem, SubmitModelCache, RevertModelCache } |
パブリック関数
QAbstractItemDelegate(QObject *parent = nullptr) | |
virtual | ~QAbstractItemDelegate() |
virtual QWidget * | createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const |
virtual void | destroyEditor(QWidget *editor, const QModelIndex &index) const |
virtual bool | editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) |
virtual bool | helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index) |
virtual void | paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const = 0 |
virtual void | setEditorData(QWidget *editor, const QModelIndex &index) const |
virtual void | setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const |
virtual QSize | sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const = 0 |
virtual void | updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const |
シグナル
void | closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint) |
void | commitData(QWidget *editor) |
void | sizeHintChanged(const QModelIndex &index) |
詳細説明
QAbstractItemDelegate は、モデル/ビュー・アーキテクチャーにおけるデリゲートのインターフェースと共通機能を提供します。デリゲートはビューに個々の項目を表示し、モデルデータの編集を処理する。
QAbstractItemDelegate クラスは、Model/View クラスの一つであり、Qt のmodel/view フレームワークの一部です。
項目をカスタムな方法でレンダリングするには、paint ()とsizeHint ()を実装する必要があります。QStyledItemDelegate クラスは、これらの関数のデフォルト実装を提供します。カスタムレンダリングが不要な場合は、代わりにこのクラスをサブクラス化してください。
ここでは、アイテムにプログレス・バーを描画する例を示します。
QStyledItemDelegate を継承したWidgetDelegate
クラスを作成し、paint() 関数で描画を行います:
void WidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == 1) { int progress = index.data().toInt(); QStyleOptionProgressBar progressBarOption; progressBarOption.rect = option.rect; progressBarOption.minimum = 0; progressBarOption.maximum = 100; progressBarOption.progress = progress; progressBarOption.text = QString::number(progress) + "%"; progressBarOption.textVisible = true; QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter); } else QStyledItemDelegate::paint(painter, option, index);
QStyleOptionProgressBar 、そのメンバを初期化している。その後、現在のQStyle を使って描画することができる。
カスタム編集を行うには、2つのアプローチがあります。1つ目は、エディタ・ウィジェットを作成し、アイテムの上に直接表示する方法です。これを行うには、createEditor() を再実装してエディタ・ウィジェットを提供し、setEditorData() でモデルからのデータをエディタに投入し、setModelData() でデリゲートがエディタからのデータでモデルを更新できるようにする必要があります。
2つ目のアプローチは、editorEvent ()を再実装することで、ユーザーイベントを直接処理することです。
モデル/ビュー・プログラミング、QStyledItemDelegate およびQStyleも参照してください 。
メンバ型ドキュメント
enum QAbstractItemDelegate::EndEditHint
この列挙型は、デリゲートがモデルやビューコンポーネントに与える様々なヒントを記述します。
定数 | 値 | 説明 |
---|---|---|
QAbstractItemDelegate::NoHint | 0 | 推奨されるアクションはありません。 |
これらのヒントは、デリゲートにビューの動作に影響を与えます:
定数 | 値 | 説明 |
---|---|---|
QAbstractItemDelegate::EditNextItem | 1 | ビューは、ビュー内の次のアイテムのエディタを開くためにデリゲートを使用する必要があります。 |
QAbstractItemDelegate::EditPreviousItem | 2 | ビューは、ビュー内の前のアイテムのエディタを開くためにデリゲートを使用する必要があります。 |
カスタムビューは、nextとpreviousの概念を異なって解釈する可能性があることに注意してください。
以下のヒントは、パフォーマンスを向上させたりネットワーク帯域幅を節約するためにローカルでデータを操作するような、データをキャッシュするモデルを使用する場合に最も役立ちます。
定数 | 値 | 説明 |
---|---|---|
QAbstractItemDelegate::SubmitModelCache | 3 | モデルがデータをキャッシュする場合、キャッシュされたデータを基礎となるデータストアに書き出します。 |
QAbstractItemDelegate::RevertModelCache | 4 | モデルがデータをキャッシュする場合、キャッシュされたデータを破棄し、基礎となるデータストアのデータと置き換えるべきです。 |
モデルとビューは適切な方法でこれらのヒントに応答する必要がありますが、カスタムコンポーネントは、関連性がない場合、これらのヒントの一部または全部を無視することができます。
メンバ関数ドキュメント
[explicit]
QAbstractItemDelegate::QAbstractItemDelegate(QObject *parent = nullptr)
与えられたparent を持つ新しい抽象項目デリゲートを作成します。
[virtual noexcept]
QAbstractItemDelegate::~QAbstractItemDelegate()
抽象項目デリゲートを破棄します。
[signal]
void QAbstractItemDelegate::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint)
このシグナルは、ユーザが指定されたeditor を使ってアイテムの編集を終了したときに発行されます。
hint は、デリゲートが編集完了後のモデルとビューの動作に影響を与える方法を提供します。これは、ユーザーに快適な編集体験を提供するために、次に実行されるべきアクションをこれらのコンポーネントに示します。例えば、EditNextItem
が指定された場合、ビューはデリゲートを使用してモデルの次のアイテムのエディタを開く必要があります。
EndEditHintも参照してください 。
[signal]
void QAbstractItemDelegate::commitData(QWidget *editor)
このシグナルは、editor ウィジェットがデータの編集を完了し、それをモデルに書き戻したいときに発せられなければなりません。
[virtual]
QWidget *QAbstractItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
与えられたindex を持つデータ項目の編集に使用されるエディタを返します。インデックスには、使用されているモデルに関する情報が含まれていることに注意してください。エディタの親ウィジェットはparent で指定され、項目オプションはoption で指定されます。
基本実装はnullptr
を返します。カスタム編集を行いたい場合は、この関数を再実装する必要があります。
返されたエディタウィジェットはQt::StrongFocus を持つ必要があります。そうでない場合、ウィジェットが受け取ったQMouseEventはビューに伝搬します。エディタが独自の背景を描画しない限り、ビューの背景が透けて見えます(例えば、setAutoFillBackground())。
destroyEditor(),setModelData(),setEditorData()も参照してください 。
[virtual]
void QAbstractItemDelegate::destroyEditor(QWidget *editor, const QModelIndex &index) const
指定されたindex を持つデータ項目の編集にeditor が不要になり、破棄されるべきときに呼び出されます。デフォルトの動作はエディタのdeleteLaterの呼び出しです。この関数を再実装することで、この削除を回避することができます。
createEditor()も参照してください 。
[virtual]
bool QAbstractItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
アイテムの編集が開始されると、この関数は編集のトリガーとなったevent 、アイテムのmodel 、index 、アイテムのレンダリングに使用されたoption 。
アイテムの編集が開始されなくても、マウスイベントはeditorEvent()に送られます。これは例えば、アイテム上でマウスの右ボタンが押されたときにコンテキストメニューを開きたい場合に便利です。
基本実装はfalse
を返します(イベントを処理していないことを示します)。
[virtual]
bool QAbstractItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index)
ヘルプイベントが発生するたびに、この関数はevent view option と、イベントが発生したアイテムに対応するindex で呼び出される。
デリゲートがイベントを処理できる場合はtrue
を返し、そうでない場合はfalse
を返す。trueの戻り値は、インデックスを使用して取得されたデータが必要な役割を持っていたことを示します。
QEvent::ToolTip とQEvent::WhatsThis イベントが正常に処理された場合、ユーザのシステム構成に応じて関連するポップアップが表示されるかもしれません。
QHelpEventも参照して ください。
[pure virtual]
void QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
カスタムレンダリングを行いたい場合は、この純粋抽象関数を再実装する必要があります。アイテムindex で指定されたアイテムをレンダリングするには、painter とスタイルoption を使用します。
これを再実装する場合は、sizeHint() も再実装する必要があります。
[virtual]
void QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
与えられたeditor の内容を、与えられたindex の項目のデータに設定する。インデックスには、使用されているモデルに関する情報が含まれていることに注意してください。
基本実装は何もしません。カスタム編集を行いたい場合は、この関数を再実装する必要があります。
setModelData()も参照してください 。
[virtual]
void QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
model の指定されたindex の項目のデータを、指定されたeditor の内容に設定する。
基本実装は何もしません。カスタム編集を行いたい場合は、この関数を再実装する必要があります。
setEditorData()も参照 。
[pure virtual]
QSize QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
カスタムレンダリングを提供したい場合は、この純粋な抽象関数を再実装する必要があります。オプションはoption で指定され、モデル項目はindex で指定されます。
これを再実装する場合は、paint() も再実装する必要があります。
[signal]
void QAbstractItemDelegate::sizeHintChanged(const QModelIndex &index)
このシグナルは、index のsizeHint() が変更されたときに発せられなければならない。
ビューは自動的にこのシグナルに接続し、必要に応じてアイテムをリレー出力します。
[virtual]
void QAbstractItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
指定されたindex を持つアイテムのeditor のジオメトリを、option で指定された長方形に従って更新する。 アイテムが内部レイアウトを持っている場合、エディタはそれに従ってレイアウトされる。インデックスには、使用されているモデルに関する情報が含まれていることに注意してください。
基本実装は何もしません。カスタム編集を行いたい場合は、この関数を再実装する必要があります。
© 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.