このページでは

TreeViewDelegate QML Type

TreeView に割り当て可能なデリゲート。詳細...

Import Statement: import QtQuick.Controls
Since: Qt 6.3
Inherits:

ItemDelegate

プロパティ

詳細な説明

ツリービューデリゲートを使用して階層データを表示するツリービュー

TreeViewDelegate は、TreeView のdelegate property に割り当てることができるデリゲートです。アプリケーションのスタイルを使用して、ビュー内のツリーやその他の列をレンダリングします。

TreeView {
    anchors.fill: parent
    delegate: TreeViewDelegate {}
    // The model needs to be a QAbstractItemModel
    // model: yourTreeModel
}

TreeViewDelegateはItemDelegate を継承しており、これはbackground 、contentItem 、indicator の3つの要素で構成されていることを意味します。TreeViewDelegateは、indenting ツリー内での位置に応じて、contentItemとインジケーターを処理します。インジケーターは、デリゲート項目がtree column 内にある場合にのみ表示され、モデル項目with children をレンダリングします。

インジケーターを変更すると、デフォルトではインデントされなくなります。その代わりに、depth およびindentation を考慮して、インジケーターのx position を設定し、手動でインデントする必要があります。その方法の例を以下に示します:

TreeViewDelegate {
    indicator: Item {
        x: leftMargin + (depth * indentation)
    }
}

contentItemの位置はpadding で制御されます。つまり、インデントを気にすることなくcontentItemを変更することができます。しかし、その一方で、paddingを他の値に変更するとインデントが失われてしまうため、paddingの変更は避けるべきです。 インジケーターの左側のスペースは、leftMargin で制御されます。インジケーターとcontentItemの間のスペースは、spacing で制御されます。また、contentItemの右側のスペースは、rightMargin で制御されます。

ポインタとの連携

TreeViewDelegateはItemDelegate を継承しています。つまり、ユーザーがデリゲートをクリックすると、clicked などのシグナルが発信されます。必要に応じて、そのシグナルに接続し、デフォルトの展開/折りたたみ動作に加えて、アプリケーション固有の機能を実装することができます(さらに、pointerNavigationEnabled をfalse に設定して、デフォルトの動作を無効にすることも可能です)。

ただし、ItemDelegate API では、クリックされた位置や、どの修飾キーが押されているかといった情報は得られません。これが必要な場合は、ポインタハンドラを使用するのがより適切なアプローチです。例えば、次のようにします。

TreeView {
    id: treeView
    delegate: TreeViewDelegate {
        TapHandler {
            acceptedButtons: Qt.RightButton
            onTapped: someContextMenu.open()
        }

        TapHandler {
            acceptedModifiers: Qt.ControlModifier
            onTapped: {
                if (treeView.isExpanded(row))
                    treeView.collapseRecursively(row)
                else
                    treeView.expandRecursively(row)
            }
        }
    }
}

注: ユーザーがデリゲートをクリックした際に発生するデフォルトの動作(現在のインデックスの変更など)を無効にしたい場合は 、pointerNavigationEnabled をfalse に設定できます。

ツリー内のノードの編集

TreeViewDelegate には、デフォルトの `edit delegate ` が割り当てられています。`TreeView ` に `edit triggers ` が設定されており、かつ `model ` が `editing model items` をサポートしている場合、ユーザーは任意の編集トリガーをアクティブにして、current ツリーノードのテキストを編集できます。

デフォルトの編集デリゲートは、Qt.EditRole を使用して、model へのデータの読み書きを試みます。QAbstractItemModel::data() がこの役割に対して空の文字列を返した場合、代わりにQt.DisplayRole が使用されます。

デフォルトの編集デリゲートが提供する機能以外のニーズがある場合は、いつでもTableView.editDelegate に独自の編集デリゲートを割り当てることができます。

TreeViewも参照してください 。

プロパティのドキュメント

current : bool

このプロパティは、デリゲートがselection model 内のcurrent index を表している場合に成立します。

depth : int

このプロパティには、デリゲートによって描画されたモデル項目の深度が格納されます。モデル項目の深度は、モデル内におけるその項目より上位にある先祖の個数と同じです。

editing : bool [since 6.5]

この特性は、デリゲートがedited.

このプロパティは Qt 6.5 で導入されました。

expanded : bool

デリゲートによって描画されたモデル項目がビュー内で展開されている場合、このプロパティは `true ` となります。

hasChildren : bool

デリゲートによって描画されたモデル項目にモデル内の子要素が存在する場合、このプロパティは `true ` となります。

indentation : real

このプロパティは、子要素が親要素に対して水平方向にインデントされる量を保持します。

isTreeNode : bool

このプロパティは、デリゲート項目がツリー内のノードを描画する場合に、true となります。ツリーの描画にはビュー内の1つの列のみが使用されるため、その列にあるデリゲート項目のみ、このプロパティがtrue に設定されます。

ツリー内のノードは、そのdepth に基づいてindented となり、hasChildren がtrue の場合、indicator を表示します。他の列にあるデリゲート項目では、このプロパティはfalse に設定されます。

leftMargin : real

このプロパティは、ビューの左端とインジケーターの左端との間のスペース(インデントに加えて)を指定します。インジケーターが表示されていない場合、このスペースはビューの左端とコンテンツ項目の左端との間になります。

rightMargin 、indentation 、およびspacingも参照してください 。

rightMargin : real

このプロパティは、ビューの右端とコンテンツ項目の右端との間のスペースを表します。

関連項目 :leftMargin 、indentation 、およびspacingも参照してください 。

selected : bool

このプロパティは、デリゲートがselection model 内のselected index を表している場合に成立します。

treeView : TreeView

このプロパティは、デリゲート項目を含むTreeView を指します。

© 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.