QStyledItemDelegate Class
QStyledItemDelegate クラスは、モデルからのデータ項目の表示および編集機能を提供します。詳細...
| ヘッダー: | #include <QStyledItemDelegate> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 継承元: | QAbstractItemDelegate |
| 継承元: |
パブリック関数
| QStyledItemDelegate(QObject *parent = nullptr) | |
| virtual | ~QStyledItemDelegate() |
| virtual QString | displayText(const QVariant &value, const QLocale &locale) const |
| QItemEditorFactory * | itemEditorFactory() const |
| void | setItemEditorFactory(QItemEditorFactory *factory) |
再実装されたパブリック関数
| virtual QWidget * | createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override |
| virtual void | paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override |
| virtual void | setEditorData(QWidget *editor, const QModelIndex &index) const override |
| virtual void | setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override |
| virtual QSize | sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override |
| virtual void | updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override |
プロテクト関数
| virtual void | initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const |
再実装されたプロテクト関数
| virtual bool | editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override |
| virtual bool | eventFilter(QObject *object, QEvent *event) override |
詳細な説明
Qt XML のアイテムビュー(QTableView など)でモデルからのデータを表示する場合、個々のアイテムはデリゲートによって描画されます。また、アイテムが編集される際、エディタウィジェットが提供され、編集が行われている間はアイテムビューの上に配置されます。 QStyledItemDelegate は、すべての Qt アイテムビューのデフォルトのデリゲートであり、アイテムビューの作成時にそれらに設定されます。
QStyledItemDelegate クラスは、モデル/ビュークラスの一つであり、Qtのモデル/ビューフレームワークの一部です。このデリゲートにより、アイテムの表示や編集を、モデルやビューとは独立して開発することが可能になります。
モデル内の項目のデータにはItemDataRole が割り当てられ、各項目は各役割ごとにQVariant を格納できます。QStyledItemDelegateは、ブール値、整数、文字列など、ユーザーが期待する最も一般的なデータ型の表示と編集を実装しています。
データは、モデル内での役割に応じて異なる方法で描画されます。次の表は、各役割と、デリゲートがそれぞれに対して処理できるデータ型について説明しています。多くの場合、ビュー内の項目の外観を決定するには、モデルが各役割に対して適切なデータを返すようにすれば十分です。
エディタは `QItemEditorFactory` を使用して作成されます。QItemEditorFactory によって提供されるデフォルトの静的インスタンスが、すべてのアイテムデリゲートにインストールされます。setItemEditorFactory() を使用してカスタムファクトリを設定するか、QItemEditorFactory::setDefaultFactory() を使用して新しいデフォルトファクトリを設定できます。
QItemEditorFactory *editorFactory = new QItemEditorFactory;
QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<MyFancyDateTimeEdit>();
editorFactory->registerEditor(QMetaType::QDateTime, creator);
QItemEditorFactory::setDefaultFactory(editorFactory);新しいファクトリが設定されると、すべての標準アイテムデリゲートがそれを使用します(つまり、新しいデフォルトファクトリが設定される前に作成されたデリゲートも同様です)。
編集されるのは、EditRole を使用してアイテムモデルに格納されたデータです。アイテムエディタファクトリに関するより高レベルな概要については、QItemEditorFactory クラスを参照してください。
QStyledItemDelegate のサブクラス化
デリゲートが必要なデータ型の描画に対応していない場合や、項目の描画をカスタマイズしたい場合は、QStyledItemDelegateをサブクラス化し、paint() および必要に応じてsizeHint() を再実装する必要があります。paint() 関数は項目ごとに個別に呼び出され、sizeHint() を使用することで、各項目に対するヒントを指定することができます。
paint() を再実装する際は、通常、描画したいデータ型を処理し、その他の型についてはスーパークラスの実装を使用します。
チェックボックスのインジケータの描画は、現在のスタイルによって行われます。スタイルでは、さまざまなデータロールに対するデータの描画サイズや境界矩形も指定されます。 項目自体の境界矩形も、スタイルによって計算されます。したがって、すでにサポートされているデータ型を描画する際は、スタイルにこれらの境界矩形を問い合わせるのが良いでしょう。QStyle クラスの説明には、これについてより詳細に記述されています。
スタイルによって計算された境界矩形や、チェックボックスインジケータの描画を変更したい場合は、QStyle をサブクラス化することができます。ただし、sizeHint()を再実装することで、項目のサイズにも影響が及ぶ可能性がある点に注意してください。
カスタムデリゲートでは、エディタ項目ファクトリを使用せずにエディタを提供することが可能です。この場合、以下の仮想関数を再実装する必要があります。
- createEditor() は、モデルからのデータを変更するために使用されるウィジェットを返し、編集動作をカスタマイズするために再実装できます。
- setEditorData() は、ウィジェットに操作対象のデータを提供します。
- updateEditorGeometry() は、アイテムビューに対してエディタが正しく表示されるようにします。
- setModelData() は、更新されたデータをモデルに返します。
「Star Delegate」の例では、これらのメソッドを再実装することでエディタを作成しています。
QStyledItemDelegate と QItemDelegate の違い
Qt 4.4 以降、QItemDelegate と QStyledItemDelegate の 2 つのデリゲートクラスが存在します。ただし、デフォルトのデリゲートは QStyledItemDelegate です。これら 2 つのクラスは、ビュー内のアイテムの描画やエディタの提供を行うための、互いに独立した代替手段です。 両者の違いは、QStyledItemDelegate が現在のスタイルを使用してアイテムを描画する点にあります。したがって、カスタムデリゲートを実装する場合や Qt スタイルシートを使用する場合は、基底クラスとして QStyledItemDelegate を使用することをお勧めします。カスタムデリゲートが描画にスタイルを使用する必要がない限り、どちらのクラスに必要なコードも同等であるはずです。
アイテムビューの描画をカスタマイズしたい場合は、カスタムスタイルを実装する必要があります。詳細については、QStyle クラスのドキュメントを参照してください。
関連項目: Delegateクラス、QItemDelegate 、QAbstractItemDelegate 、QStyle 、およびStar Delegateの例。
メンバ関数のドキュメント
[explicit] QStyledItemDelegate::QStyledItemDelegate(QObject *parent = nullptr)
指定されたparent を使用して、アイテムデリゲートを構築します。
[virtual noexcept] QStyledItemDelegate::~QStyledItemDelegate()
アイテムデリゲートを破棄します。
[override virtual] QWidget *QStyledItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
QAbstractItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const を再実装します。
index で指定された項目の編集に用いられるウィジェットを返します。エディタウィジェットの表示方法を制御するには、parent ウィジェットとスタイルoption を使用します。
QAbstractItemDelegate::createEditor()も参照してください 。
[virtual] QString QStyledItemDelegate::displayText(const QVariant &value, const QLocale &locale) const
この関数は、デリゲートがlocale でモデルのQt::DisplayRole を表示するために使用する文字列を返します。value は、モデルから提供されるQt::DisplayRole の値です。
デフォルトの実装では、QLocale::toString を使用して、value をQString に変換します。
この関数は、空のモデルインデックス、すなわちモデルが無効なQVariant を返すインデックスに対しては呼び出されません。
QAbstractItemModel::data()も参照してください 。
[override virtual protected] bool QStyledItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
QAbstractItemDelegate::editorEvent (QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)を再実装します。
[override virtual protected] bool QStyledItemDelegate::eventFilter(QObject *object, QEvent *event)
QObject::eventFilter(QObject *watched, QEvent *event) を再実装します。
詳細はQAbstractItemDelegate::handleEditorEvent() を参照してください。
[virtual protected] void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const
インデックス `index` を使用して、option を初期化します。このメソッドは、サブクラスが `QStyleOptionViewItem` を必要とするものの、すべての情報を自分で設定したくない場合に役立ちます。
QStyleOption::initFrom()も参照してください 。
QItemEditorFactory *QStyledItemDelegate::itemEditorFactory() const
アイテムデリゲートで使用されるエディタファクトリを返します。エディタファクトリが設定されていない場合、この関数は null を返します。
setItemEditorFactory()も参照してください 。
[override virtual] void QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const を再実装します。
index で指定されたアイテムに対して、指定されたpainter およびスタイルoption を使用してデリゲートをレンダリングします。
この関数は、ビューのQStyle を使用してアイテムを描画します。
サブクラスで paint を再実装する場合は、initStyleOption() を使用して、QStyledItemDelegate と同様にoption を設定してください。
可能な限り、描画時にはoption を使用してください。特に、描画位置を決定するためのrect 変数や、有効または選択されているかどうかを判断するためのstate を活用してください。
描画後は、この関数が呼び出された時点での状態へペインターを戻すようにしてください。例えば、描画前に `QPainter::save()` を呼び出し、描画後に `QPainter::restore()` を呼び出すと便利です。
QItemDelegate::paint()、QStyle::drawControl()、およびQStyle::CE_ItemViewItemも参照してください 。
[override virtual] void QStyledItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const を再実装します。
モデル `index` で指定されたデータモデル項目から、editor によって表示および編集されるデータを設定します。
デフォルトの実装では、データはeditor ウィジェットのuser プロパティに格納されます。
QMetaProperty::isUser()も参照してください 。
void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)
アイテムデリゲートが使用するエディタファクトリを、指定されたfactory に設定します。エディタファクトリが設定されていない場合、アイテムデリゲートはデフォルトのエディタファクトリを使用します。
itemEditorFactory()も参照してください 。
[override virtual] void QStyledItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const を再実装します。
editor ウィジェットからデータを取得し、指定されたmodel の項目index に格納します。
デフォルトの実装では、editor ウィジェットのuserプロパティから、データモデルに格納する値を取得します。
「QMetaProperty::isUser()」も参照してください 。
[override virtual] QSize QStyledItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const を再実装します。
option で指定されたスタイル情報を考慮し、index で指定されたアイテムを表示するためにデリゲートが必要とするサイズを返します。
この関数は、ビューの `QStyle ` を使用して、項目のサイズを決定します。
QStyle::sizeFromContents() およびQStyle::CT_ItemViewItemも参照してください 。
[override virtual] void QStyledItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
QAbstractItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const を再実装します。
index で指定された項目のeditor を、指定されたスタイルoption に基づいて更新します。
© 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.