QItemDelegate Class

QItemDelegateクラスは、モデルのデータ項目の表示と編集機能を提供します。詳細...

Header: #include <QItemDelegate>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: QAbstractItemDelegate

プロパティ

パブリック関数

QItemDelegate(QObject *parent = nullptr)
virtual ~QItemDelegate()
bool hasClipping() const
QItemEditorFactory *itemEditorFactory() const
void setClipping(bool clip)
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

保護された関数

void drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
virtual void drawCheck(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, Qt::CheckState state) const
virtual void drawDecoration(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QPixmap &pixmap) const
virtual void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const
virtual void drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const

再実装された保護された関数

virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
virtual bool eventFilter(QObject *editor, QEvent *event) override

詳細説明

QItemDelegateは、QAbstractItemView のサブクラスに基づいて、アイテムビューのカスタム表示機能とエディタウィジェットを提供するために使用することができます。この目的のためにデリゲートを使用することで、表示や編集のメカニズムをカスタマイズし、モデルやビューから独立して開発することができます。

QItemDelegateクラスはモデル/ビュークラスの1つで、Qtのモデル/ビューフレームワークの一部です。QStyledItemDelegate 、Qtのアイテム・ビューの描画を引き継いでいます。新しいデリゲートを作成する際には、QStyledItemDelegate を使用することをお勧めします。

カスタム・モデルのアイテムを標準のビューに表示する場合、ビュー内のアイテムの外観を決定するroles のそれぞれについて、モデルが適切なデータを返すようにするだけで、多くの場合十分です。Qtの標準ビューで使用されるデフォルトのデリゲートは、このロール情報を使用して、ユーザーが期待する一般的なフォームのほとんどでアイテムを表示します。しかし、デフォルトのデリゲートが提供できる以上に、アイテムの外観を制御する必要がある場合があります。

このクラスは、ビュー内の項目データをペイントする関数と、項目モデルのデータを編集する関数のデフォルト実装を提供します。QAbstractItemDelegate で定義されているpaint() およびsizeHint() 仮想関数のデフォルト実装は、デリゲートがビューに期待される正しい基本動作を実装することを保証するために提供されます。アイテムの外観をカスタマイズするために、サブクラスでこれらの関数を再実装することができます。

アイテムビューでデータを編集する場合、QItemDelegate はエディタウィジェットを提供します。エディタウィジェットは、編集中にビューの上に配置されるウィジェットです。エディタはQItemEditorFactory で作成されます。QItemEditorFactory で提供されるデフォルトの静的インスタンスは、すべてのアイテムデリゲートにインストールされます。setItemEditorFactory() を使用してカスタムファクトリを設定するか、QItemEditorFactory::setDefaultFactory() を使用して新しいデフォルトファクトリを設定することができます。編集されるのは、Qt::EditRole でアイテムモデルに格納されたデータです。

ここでは、ウィジェットベースのデリゲートの標準編集機能のみが再実装されています:

  • createEditor() は、モデルからデータを変更するために使用されるウィジェットを返し、編集動作をカスタマイズするために再実装できます。
  • setEditorData() は、操作するデータをウィジェットに提供します。
  • updateEditorGeometry() は、アイテムビューに対してエディタが正しく表示されるようにします。
  • setModelData() は更新されたデータをモデルに返します。

closeEditor() シグナルは、ユーザがデータの編集を完了し、エディタウィジェットを破棄できることを示します。

標準の役割とデータ型

Qt に付属する標準ビューで使用されるデフォルトのデリゲートは、各標準ロール(Qt::ItemDataRole で定義)を特定のデータ型に関連付けます。これらのデータ型のデータを返すモデルは、以下の表で説明するように、デリゲートの外観に影響を与えることができます。

デフォルトのデリゲートでは、表示目的やデータの編集など、必要なレベルのカスタマイズができない場合は、QItemDelegateをサブクラス化して、必要な動作を実装することができます。

サブクラス化

QItemDelegate をサブクラス化して、カスタムレンダラを使用してアイテムを表示するデリゲートを作成する場合、そのデリゲートが、selected、disabled、checked など、必要なすべての状態に対して適切にアイテムをレンダリングできることを確認することが重要です。paint() 関数のドキュメントには、これを実現するためのヒントがいくつか記載されています。

QItemEditorFactory を使用することで、カスタムエディタを提供することができます。 次のコードは、カスタムエディタをデフォルトのアイテムエディタファクトリでデリゲートに提供する方法を示しています。

QItemEditorFactory *editorFactory = new QItemEditorFactory;
QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<MyFancyDateTimeEdit>();
editorFactory->registerEditor(QMetaType::QDateTime, creator);

QItemEditorFactory::setDefaultFactory(editorFactory);

デフォルトのファクトリーが設定されると、すべての標準アイテムのデリゲートはそれを使用します(デフォルトのファクトリーを設定する前に作成されたデリゲートも使用します)。

この方法では、QItemDelegateのサブクラス化を避けることができ、指定された型のすべての値(例えば、QMetaType::QDateTime )は、提供されたエディタを使用して編集されます(上記の例では、MyFancyDateTimeEdit のように)。

別の方法として、createEditor ()、setEditorData ()、setModelData ()、updateEditorGeometry ()を再実装することもできます。この手順については、モデル/ビュー・プログラミングの概要 ドキュメントを参照してください。

QStyledItemDelegate と QItemDelegate の比較

Qt 4.4 以降、2 つのデリゲート・クラスがあります:QStyledItemDelegateただし、デフォルトのデリゲートはQStyledItemDelegate です。この2つのクラスは、ビューのアイテムをペイントしたり、エディタを提供したりするための独立した代替手段です。両者の違いは、QStyledItemDelegate が現在のスタイルを使用してアイテムをペイントすることです。したがって、カスタムのデリゲートを実装する場合や、Qtスタイルシートを使用する場合は、QStyledItemDelegate を基本クラスとして使用することをお勧めします。カスタム・デリゲートが描画にスタイルを使用する必要がない限り、どちらのクラスに必要なコードも等しくなるはずです。

デリゲート・クラスQStyledItemDelegateQAbstractItemDelegateも参照してください

プロパティの説明

clipping : bool

デリゲートがペイントイベントをクリップする場合

このプロパティは、ペイントクリップをアイテムのサイズに設定します。デフォルト値は on です。画像がアイテムのサイズより大きい場合などに便利です。

アクセス関数

bool hasClipping() const
void setClipping(bool clip)

メンバ関数説明

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

与えられたparent で item delegate を構築します。

[virtual noexcept] QItemDelegate::~QItemDelegate()

アイテムデリゲートを破棄します。

[override virtual] QWidget *QItemDelegate::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()も参照してください

[protected] void QItemDelegate::drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

与えられたpainter とスタイルoption を使って、与えられたindex のアイテムの背景をレンダリングします。

[virtual protected] void QItemDelegate::drawCheck(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, Qt::CheckState state) const

指定されたpainter と styleoption を使って、rect で指定された矩形内に、指定されたstate で指定されたチェック・インジケータを描画します。

[virtual protected] void QItemDelegate::drawDecoration(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QPixmap &pixmap) const

与えられたpainter と styleoption を使用して、rect で指定された矩形内に装飾pixmap をレンダリングします。

[virtual protected] void QItemDelegate::drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const

与えられたpainter と styleoption を使用して、rect で指定された矩形内にアイテム ビューtext をレンダリングします。

[virtual protected] void QItemDelegate::drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const

与えられたpainter と styleoption を使用して、フォーカスがあることを示すrect で指定された矩形内の領域をレンダリングします。

[override virtual protected] bool QItemDelegate::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 QItemDelegate::eventFilter(QObject *editor, QEvent *event)

再インプリメント:QObject::eventFilter(QObject *watched, QEvent *event)。

与えられたeditor が有効なQWidget であり、与えられたevent が処理される場合はtrue を返し、そうでない場合はfalse を返す。以下のキー押下イベントはデフォルトで処理されます:

  • Tab
  • Backtab
  • Enter
  • Return
  • Esc

TabBacktabEnterReturn キー押下イベントの場合、editor'のデータはモデルにコミットされ、エディタは閉じられます。eventTab キー押下の場合、ビューはビュー内の次のアイテムのエディタを開きます。同様に、eventBacktab キーの押下である場合、ビューはビュー内の前のアイテムのエディタを開きます。

イベントがEsc キー押下イベントの場合、editor はデータをコミットせずに閉じられます。

commitData() およびcloseEditor()も参照してください

QItemEditorFactory *QItemDelegate::itemEditorFactory() const

アイテムデリゲートが使用するエディタファクトリを返します。エディタファクトリが設定されていない場合、この関数はnullを返します。

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

[override virtual] void QItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

再実装:QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const.

index で指定されたアイテムに対して、与えられたpainter とスタイルoption を使用してデリゲートをレンダリングします。

サブクラスでこの関数を再実装する場合、表示されるアイテムの状態を決定するためにオプションのstate 変数を使用して、オプションのrect 変数によって保持される領域を更新し、それに応じて描画方法を調整する必要があります。

たとえば、次のコードのように、選択された項目は、選択されていない項目とは異なる方法で表示する必要があるかもしれません:

if (option.state & QStyle::State_Selected)
    painter->fillRect(option.rect, option.palette.highlight());

ペイントが終わったら、ペインターをこの関数が呼ばれたときの状態に戻してください。たとえば、ペイントする前にQPainter::save() を呼び、ペイント後にQPainter::restore() を呼び出すと便利です。

QStyle::Stateも参照

[override virtual] void QItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const

再インプリメント:QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const.

モデルindex によって指定されたデータモデル項目から、editor によって表示および編集されるデータを設定します。

デフォルトの実装では、editor ウィジェットのユーザ・プロパティにデータを格納します。

QMetaProperty::isUser()も参照してください

void QItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)

アイテムデリゲートによって使用されるエディタファクトリを、指定されたfactory に設定します。エディタ工場が設定されていない場合、アイテムデリゲートはデフォルトのエディタ工場を使用します。

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

[override virtual] void QItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const

再実装:QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const.

editor ウィジェットからデータを取得し、指定されたmodel の項目index に格納します。

デフォルトの実装では、editor ウィジェットのユーザ・プロパティからデータモデルに格納する値を取得します。

QMetaProperty::isUser()も参照してください

[override virtual] QSize QItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const

再実装:QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const.

option によって提供されたスタイル情報を考慮して、index によって指定されたアイテムを表示するためにデリゲートが必要とするサイズを返します。

この関数を再実装する場合、テキストアイテムの場合、QItemDelegate 、テキストの長さにマージン(すなわち、2 *QStyle::PM_FocusFrameHMargin )が追加されることに注意してください。

[override virtual] void QItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const

再実装します:QAbstractItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const.

与えられたスタイルoption に従ってindex で指定されたアイテムのeditor を更新します。

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。