TableView QML Type

モデルからのデータを表示するための項目のテーブルビューを提供します。詳細...

Import Statement: import QtQuick
Inherits:

Flickable

Inherited By:

TreeView

プロパティ

付属プロパティ

シグナル

  • columnMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex) (since 6.8)
  • layoutChanged() (since 6.5)
  • rowMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex) (since 6.8)

付属シグナル

メソッド

詳細説明

TableViewは、表示するデータを定義するmodel 、データの表示方法を定義するdelegate

TableViewはFlickable を継承します。つまり、モデルは任意の数の行と列を持つことができますが、ビューポート内には通常テーブルのサブセクションしか表示されません。フリックするとすぐに、新しい行と列がビューポートに入り、古い行と列はビューポートから削除されます。移動した行や列は、ビューポートに移動する行や列を構築するために再利用されます。このように、TableViewは、パフォーマンスに影響を与えることなく、あらゆるサイズのモデルをサポートします。

TableViewは、ListModelXmlListModel のような組み込みのQMLタイプから作成されたモデルのデータを表示します。複数の列を持つモデルを作成するには、TableModel またはQAbstractItemModel を継承した C++ モデルを使用してください。

TableViewはデフォルトではヘッダーを含みません。Qt Quick Controls のHorizontalHeaderViewVerticalHeaderView を使用してヘッダーを追加できます。

注: TableViewは、ビューを埋めるのに必要な数のデリゲート項目のみをload 。TableViewは、最適化のためにアイテムを事前にロードすることがありますが、ビュー外のアイテムがロードされる保証はありません。したがって、幅または高さがゼロのTableViewは、デリゲート項目を全くロードしないかもしれません。

使用例

C++モデル

以下の例では、C++から複数の列を持つモデルを作成する方法を示します:

#include <qqml.h>
#include <QAbstractTableModel>

class TableModel : public QAbstractTableModel
{
    Q_OBJECT
    QML_ELEMENT

public:
    int rowCount(const QModelIndex & = QModelIndex()) const override
    {
        return 200;
    }

    int columnCount(const QModelIndex & = QModelIndex()) const override
    {
        return 200;
    }

    QVariant data(const QModelIndex &index, int role) const override
    {
        switch (role) {
            case Qt::DisplayRole:
                return QString("%1, %2").arg(index.column()).arg(index.row());
            default:
                break;
        }

        return QVariant();
    }

    QHash<int, QByteArray> roleNames() const override
    {
        return { {Qt::DisplayRole, "display"} };
    }
};

そしてそれをQMLから使用する方法を示します:

import QtQuick
import TableModel

TableView {
    anchors.fill: parent
    columnSpacing: 1
    rowSpacing: 1
    clip: true

    model: TableModel {}

    delegate: Rectangle {
        implicitWidth: 100
        implicitHeight: 50
        Text {
            text: display
        }
    }
}

QMLモデル

非常に単純なデータ(例えばウェブAPIから)のプロトタイピングや表示には、TableModel

import QtQuick
import Qt.labs.qmlmodels

TableView {
    anchors.fill: parent
    columnSpacing: 1
    rowSpacing: 1
    clip: true

    model: TableModel {
        TableModelColumn { display: "name" }
        TableModelColumn { display: "color" }

        rows: [
            {
                "name": "cat",
                "color": "black"
            },
            {
                "name": "dog",
                "color": "brown"
            },
            {
                "name": "bird",
                "color": "white"
            }
        ]
    }

    delegate: Rectangle {
        implicitWidth: 100
        implicitHeight: 50
        border.width: 1

        Text {
            text: display
            anchors.centerIn: parent
        }
    }
}

項目の再利用

TableViewは、新しい行や列が表示されるたびにdelegate 、デリゲートアイテムを再利用します。このアプローチにより、デリゲートの複雑さにもよりますが、パフォーマンスが大幅に向上します。

アイテムがフリックアウトされると、未使用アイテムの内部キャッシュである再利用プールに移動します。このとき、TableView::pooled シグナルが発せられ、アイテムに通知されます。同様に、アイテムがプールから戻されると、TableView::reused シグナルが発せられます。

アイテムが再利用されると、モデルに由来するアイテム・プロパティが更新されます。これには、indexrowcolumn だけでなく、モデルのロールも含まれます。

注: デリゲートの内部に状態を保存することは避けてください。保存する場合は、TableView::reused シグナルを受信したときに手動でリセットしてください。

アイテムにタイマーやアニメーションがある場合は、TableView::pooled シグナルの受信時にそれらを一時停止することを検討してください。そうすることで、表示されていないアイテムのためにCPUリソースを使うことを避けることができます。同様に、アイテムに再利用できないリソースがある場合、それらを解放することもできます。

アイテムを再利用したくない場合や、delegate がサポートできない場合は、reuseItems プロパティをfalse に設定します。

注: アイテムがプールにある間、それはまだ生きていて、接続されたシグナルやバインディングに応答するかもしれません。

次の例は、回転する矩形をアニメーション化するデリゲートです。プールされると、アニメーションは一時的に停止します:

Component {
    id: tableViewDelegate
    Rectangle {
        implicitWidth: 100
        implicitHeight: 50

        TableView.onPooled: rotationAnimation.pause()
        TableView.onReused: rotationAnimation.resume()

        Rectangle {
            id: rect
            anchors.centerIn: parent
            width: 40
            height: 5
            color: "green"

            RotationAnimation {
                id: rotationAnimation
                target: rect
                duration: (Math.random() * 2000) + 200
                from: 0
                to: 359
                running: true
                loops: Animation.Infinite
            }
        }
    }
}

行の高さと列の幅

新しい列がフリックされて表示されると、TableViewはcolumnWidthProvider を呼び出してその幅を決定します。 セットされている場合、この関数だけで列の幅が決定されます。そうでない場合は、setColumnWidth() で明示的な幅が設定されているかどうかをチェックします。設定されていない場合は、implicitColumnWidth() が使用されます。列の暗黙的な幅は、その列で現在読み込まれているデリゲート項目の中で見つかった最大のimplicit width と同じです。デリゲートに直接明示的なwidth を設定しようとしても効果はなく、無視されて上書きされます。同じロジックが行の高さにも適用されます。

デフォルトのロジックと同等のcolumnWidthProvider の実装は次のようになります:

columnWidthProvider: function(column) {
    let w = explicitColumnWidth(column)
    if (w >= 0)
        return w;
    return implicitColumnWidth(column)
}

列の幅が解決されると、同じ列の他のすべてのアイテムは、後の時点でビューにフリックされたアイテムを含め、この幅にリサイズされます。

注意: 解決された列の幅は、列全体がビューからフリックされると破棄され、再びフリックされると再計算されます。これは、幅がimplicitColumnWidth() に依存している場合、列が入るときにどの行にいるかによって、計算が毎回異なる可能性があることを意味します(implicitColumnWidth() は、現在loaded であるデリゲート項目のみを考慮するため)。これを避けるには、columnWidthProvider を使用するか、同じ列のすべての代議員項目が同じimplicitWidth を持つようにする必要があります。

ビューポート内の行や列に対してrowHeightProvidercolumnWidthProvider が返す値を変更する場合は、forceLayout を呼び出す必要があります。これにより、TableViewはプロバイダ関数を再度使用して再計算し、レイアウトを更新する必要があることを通知します。

Qt 5.13以降、特定の列を非表示にしたい場合、その列のcolumnWidthProvider から0 を返すことができます。同様に、行を非表示にするには、rowHeightProvider から 0 を返します。負の数を返した場合、TableViewはデリゲート項目に基づいてサイズを計算するようにフォールバックします。

注意: 行または列のサイズは、項目のサブピクセル整列を避けるために整数でなければなりません。

次の例では、関数が返す値を変更するタイマーとともに、単純なcolumnWidthProvider を設定する方法を示します。配列が変更されると、forceLayout が呼び出され、変更が有効になります:

TableView {
    id: tableView

    property var columnWidths: [100, 50, 80, 150]
    columnWidthProvider: function (column) { return columnWidths[column] }

    Timer {
        running: true
        interval: 2000
        onTriggered: {
            tableView.columnWidths[2] = 150
            tableView.forceLayout();
        }
    }
}

セルの編集

editデリゲートを提供することで、ユーザーにテーブルのセルを編集させることができます。editデリゲートは、editTriggers に従ってインスタンス化されます。デフォルトでは、ユーザーがセルをダブルタップするか、Qt::Key_EnterQt::Key_Return などを押したときにインスタンス化されます。editデリゲートは、TableView::editDelegate を使用して設定されます。これは、delegate に設定するアタッチされたプロパティです。次のスニペットは、その方法を示しています:

    TableView {
        id: tableView
        anchors.fill: parent
        clip: true

        model: TableModel {
            TableModelColumn { display: "name" }
            rows: [ { "name": "Harry" }, { "name": "Hedwig" } ]
        }

        selectionModel: ItemSelectionModel {}

        delegate: Rectangle {
            implicitWidth: 100
            implicitHeight: 50

            Text {
                anchors.centerIn: parent
                text: display
            }

            TableView.editDelegate: TextField {
                anchors.fill: parent
                text: display
                horizontalAlignment: TextInput.AlignHCenter
                verticalAlignment: TextInput.AlignVCenter
                Component.onCompleted: selectAll()

                TableView.onCommit: {
                    display = text
                    // 'display = text' is short-hand for:
                    // let index = TableView.view.index(row, column)
                    // TableView.view.model.setData(index, "display", text)
                }
            }
        }
    }

editデリゲートがアクティブな間にユーザーがQt::Key_Enter またはQt::Key_Return を押すと、TableViewはeditデリゲートにTableView::commit シグナルを発行し、変更されたデータをモデルに書き戻すことができます。

注: セルを編集可能にするためには、モデルがQAbstractItemModel::flags() をオーバーライドし、Qt::ItemIsEditable を返す必要があります。このフラグはデフォルトではQAbstractItemModel では有効になっていない。オーバーライドは例えば次のようになります:

Qt::ItemFlags QAbstractItemModelSubClass::flags(const QModelIndex &index) const override
{
    Q_UNUSED(index)
    return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable;
}

TableView delegaterequired property bool editing というプロパティが定義されている場合、編集中のデリゲートにはtrue が設定されます。使い方の例については、editDelegate のドキュメントを参照してください。

オーバーレイとアンダーレイ

デリゲートからインスタンス化される新しいアイテムはすべて、z の値1 を持つcontentItem の親になります。フリック可能なアイテムの子アイテムとして、テーブルビュー内に独自のアイテムを追加できます。z の値を制御することで、テーブルアイテムの上や下に配置することができます。

ここでは、フリックするとテーブルと一緒に移動するテキストをテーブルの上に追加する例を示します:

TableView {
    id: tableView

    topMargin: header.implicitHeight

    Text {
        id: header
        text: "A table header"
    }
}

もう1つの例は、特定のセルの上に表示されるオーバーレイ・アイテムの作成方法です。この場合、セルの位置がchange になってしまうので、もう少しコードが必要になります。

Rectangle {
    id: overlay
    width: 20
    height: 20
    radius: 10
    color: "blue"

    z: 10
    parent: tableView.contentItem

    Connections {
        target: tableView
        function onLayoutChanged() {
            let item = tableView.itemAtCell(5, 5)
            let insideViewport = item !== null

            overlay.visible = insideViewport
            if (insideViewport) {
                overlay.x = item.x
                overlay.y = item.y
            }
        }
    }
}

また、contentItem の代わりに、セルに直接オーバーレイを親にすることもできます。しかし、そうすると、セルがビューポートからフリックされるたびにアンロードまたは再利用されるため、壊れやすくなります。

アイテムの選択

selectionModel プロパティにItemSelectionModel を割り当てることで、TableViewに選択サポートを追加することができます。そして、このモデルを使用して、どのデリゲート項目を選択項目として表示し、どの項目をカレント項目として表示するかを制御します。selectionBehavior 、ユーザーが個々のセル、行、列を選択できるかどうかを制御するように設定できます。

デリゲートが選択されているかカレントであるかを調べるには、以下のプロパティを宣言します:

delegate: Item {
    required property bool selected
    required property bool current
    // ...
}

注: selectedcurrent プロパティは、required として定義する必要があります。これにより、TableViewはそれらの値を更新する責任を負わなければならないことが通知されます。そうでない場合、それらは単に無視されます。必須プロパティも参照してください。

以下のスニペットは、selected プロパティに応じて、アプリケーションがデリゲートをどのようにレンダリングするかを示しています:

    TableView {
        id: tableView
        anchors.fill: parent
        clip: true

        model: TableModel {
            TableModelColumn { display: "name" }
            rows: [ { "name": "Harry" }, { "name": "Hedwig" } ]
        }

        selectionModel: ItemSelectionModel {}

        delegate: Rectangle {
            implicitWidth: 100
            implicitHeight: 30
            color: selected ? "blue" : "lightgray"

            required property bool selected

            Text { text: display }
        }
    }

currentRow およびcurrentColumn プロパティは、デリゲートが現在のアイテムと同じ行または列にあるかどうかによって、異なるレンダリングを行う必要がある場合にも便利です。

注: Qt Quick Controlsは、ユーザーがセルを選択するために使用できるSelectionRectangle を提供します。

注意 : デフォルトでは、ユーザーがセルをタップすると、セルはcurrent になり、選択された項目は削除されます。このようなデフォルトのタップ動作を望まない場合(デリゲート内でカスタム・ポインタ・ハンドラを使用している場合など)、pointerNavigationEnabledfalse に設定することができます。

キーボードナビゲーション

キーボードナビゲーションをサポートするには、selectionModel プロパティにItemSelectionModel を割り当てる必要があります。TableViewはこのモデルを使用して、モデルのcurrentIndex を操作します。

自分自身をcurrent としてレンダリングするのは、デリゲートの責任です。これを行うには、required property bool current プロパティを追加し、外観をその状態に依存させます。current プロパティの値は、TableViewによって設定されます。また、keyNavigationEnabledfalse に設定することで、キーボード・ナビゲーションを完全に無効にすることもできます(独自のキー・ハンドラを実装する場合)。

次の例では、current およびselected プロパティと共にキーボード・ナビゲーションを使用する方法を示します:

ApplicationWindow {
    width: 800
    height: 600
    visible: true
    ScrollView {
        anchors.fill: parent
        TableView {
            id: tableView
            clip: true
            interactive: true
            rowSpacing: 1
            columnSpacing: 1
            model: TableModel {
                TableModelColumn { display: "checked" }
                TableModelColumn { display: "amount" }
                TableModelColumn { display: "fruitType" }
                TableModelColumn { display: "fruitName" }
                TableModelColumn { display: "fruitPrice" }

                rows: [
                    {
                        checked: false,
                        amount: 1,
                        fruitType: "Apple",
                        fruitName: "Granny Smith",
                        fruitPrice: 1.50
                    },
                    {
                        checked: true,
                        amount: 4,
                        fruitType: "Orange",
                        fruitName: "Navel",
                        fruitPrice: 2.50
                    },
                    {
                        checked: false,
                        amount: 1,
                        fruitType: "Banana",
                        fruitName: "Cavendish",
                        fruitPrice: 3.50
                    }
                ]
            }
            selectionModel: ItemSelectionModel {}
            delegate: Rectangle {
                implicitWidth: 100
                implicitHeight: 50
                required property bool selected
                required property bool current
                border.width: current ? 2 : 0
                color: selected ? "lightblue" : palette.base
                Text{
                    text: model.display
                    padding: 12
                }
            }
        }
    }
    SelectionRectangle {
        target: tableView
    }
}

コ ピー と 貼 り 付け

TableViewのコピー&ペースト操作の実装には、通常、QUndoStack (または他のアンドゥ/リドゥ・フレームワーク)の使用も含まれます。QUndoStack は、行の追加や削除、クリップボードからのデータの貼り付けなど、モデル上で行われたさまざまな操作を保存するために使用することができ、後でもう一度元に戻すことができます。しかし、可能な操作とそれを元に戻す方法を記述した付属のQUndoStack 、モデルとアプリケーションのニーズに応じて設計されなければなりません。このように、TableViewはコピー&ペーストを処理するための組み込みAPIを提供していません。

以下のスニペットは、モデルとTableViewにコピー&ペーストのサポートを追加する方法のリファレンスとして使用できます。このスニペットは、QAbstractItemModel にある既存の mime data API と、QClipboard を使用しています。このスニペットはそのままでも動作しますが、QUndoStack を使用するように拡張することもできます。

// Inside your C++ QAbstractTableModel subclass:

Q_INVOKABLE void copyToClipboard(const QModelIndexList &indexes) const
{
    QGuiApplication::clipboard()->setMimeData(mimeData(indexes));
}

Q_INVOKABLE bool pasteFromClipboard(const QModelIndex &targetIndex)
{
    const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData();
    // Consider using a QUndoCommand for the following call. It should store
    // the (mime) data for the model items that are about to be overwritten, so
    // that a later call to undo can revert it.
    return dropMimeData(mimeData, Qt::CopyAction, -1, -1, targetIndex);
}

この2つの関数は、例えばQMLから次のように使うことができます:

TableView {
    id: tableView
    model: tableModel
    selectionModel: ItemSelectionModel {}

    Shortcut {
       sequence: StandardKey.Copy
       onActivated: {
           let indexes = tableView.selectionModel.selectedIndexes
           tableView.model.copyToClipboard(indexes)
       }
    }

    Shortcut {
       sequence: StandardKey.Paste
       onActivated: {
           let targetIndex = tableView.selectionModel.currentIndex
           tableView.model.pasteFromClipboard(targetIndex)
       }
    }
}

TableView::editDelegate,TableView::commit,editTriggers,edit() ,closeEditor() ,layoutChanged() ,QAbstractItemModel::mimeData() ,QAbstractItemModel::dropMimeData() ,QUndoStack,QUndoCommand, およびQClipboardも参照して ください。

プロパティ文書

alternatingRows : bool

このプロパティは、行の背景色を交互に表示するかどうかを制御する。デフォルト値はスタイルに依存する。

注意: このプロパティはヒントに過ぎないので、カスタムデリゲートでは尊重されないかもしれません。このヒントがtrue の場合、デリゲートはpalette.basepalette.alternateBase を交互に表示し、デリゲートの外部から色を設定できるようにすることを推奨します。例えば

background: Rectangle {
    color: control.row === control.tableView.currentRow
           ? control.palette.highlight
           : (control.tableView.alternatingRows && control.row % 2 !== 0
           ? control.palette.alternateBase
           : control.palette.base)
}

animate : bool [since 6.4]

このプロパティは、TableViewcontentItem (contentXcontentY) をアニメーションさせるかどうかを制御するために設定することができます。このプロパティは、positionViewAtCell() や、the current index をキーボードでナビゲートするときに使用されます。デフォルト値はtrue です。

false に設定すると、進行中のアニメーションは直ちに停止します。

注意: このプロパティはあくまでもヒントである。TableView は、例えばターゲットセルがloaded でない場合、アニメーションなしでコンテンツアイテムを配置することを選択するかもしれない。しかし、false に設定すると、アニメーションは常にオフになります。

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

positionViewAtCell()も参照してください


bottomRow : int

このプロパティは、ビュー内で現在表示されている最下行を保持します。

leftColumnrightColumntopRowも参照して ください。


columnSpacing : real

このプロパティは、列間の間隔を保持する。

デフォルト値は0


columnWidthProvider : var

このプロパティは、モデルの各列の列幅を返す関数を保持することができます。この関数は、TableView が特定の列の幅を知りたいときに呼び出されます。この関数は、TableView が幅を知る必要のある引数、column を取ります。

Qt 5.13以降、特定の列を非表示にしたい場合は、その列の0 widthを返すことができます。負の数を返すと、TableView はデリゲート項目に基づいて幅を計算します。

注意: columnWidthProviderは通常、カラムがロードされようとするとき(またはレイアウトを行うとき)に2回呼び出されます。まず、カラムが表示されていて、ロードされるべきかどうかを知るためです。そして2つ目は、すべてのアイテムがロードされた後にカラムの幅を決定するためです。デリゲートアイテムのサイズに基づいてカラム幅を計算する必要がある場合は、すべてのアイテムがロードされたときに2回目の呼び出しを待つ必要があります。このチェックは、isColumnLoaded (column)を呼び出すことで行うことができ、そうでない場合は単に-1を返します。

rowHeightProviderisColumnLoaded()、Row heights and column widthsも参照のこと


columns : int [read-only]

このプロパティは、テーブルの列数を保持します。

注: columns は通常モデル内の列数と等しいが、保留中のモデル変更がすべて処理されるまで、一時的に異なることがある。

モデルがリストの場合、列は1 になります。

このプロパティは読み取り専用です。


contentHeight : real

このプロパティは、データモデルの行数を収容するために必要なテーブルの高さを保持します。これは通常、viewheight と同じではありません。つまり、テーブルの高さはビューポートの高さよりも大きかったり小さかったりします。TableView 、モデル内のすべての行を読み込むことなくテーブルの正確な高さを常に知ることはできないため、contentHeight 、通常は最初に読み込まれたテーブルに基づく推定値となります。

テーブルの高さがわかっている場合は、不要な計算やTableView の更新を避けるために、contentHeight に値を代入してください。

contentWidth およびrowHeightProviderも参照してください


contentWidth : real

このプロパティは、モデルの列数を収容するために必要なテーブル幅を保持します。これは通常、viewwidth と同じではありません。つまり、テーブルの幅はビューポートの幅よりも大きかったり小さかったりします。TableView 、モデル内のすべての列を読み込むことなくテーブルの正確な幅を常に知ることはできないため、contentWidth 、通常は最初に読み込まれたテーブルに基づく推定値となります。

テーブルの幅がわかっている場合は、不要な計算やTableView の更新を避けるために、contentWidth に値を代入してください。

contentHeight およびcolumnWidthProviderも参照してください


currentColumn : int [read-only]

この読み取り専用プロパティは、current. の項目を含むビューの列を保持します。現在の項目がない場合は、-1 になります。

注: TableView が現在の列が何であるかを報告するためには、ItemSelectionModelselectionModel に割り当てる必要があります。

currentRowselectionModelSelecting itemsも参照してください


currentRow : int [read-only]

この読み取り専用プロパティは、current. である項目を含むビューの行を保持します。 現在の項目がない場合は、-1 になります。

注: TableView が現在の行を報告するためには、ItemSelectionModelselectionModel に割り当てる必要があります。

currentColumnselectionModelSelecting itemsも参照して ください。


delegate : Component

デリゲートは、ビューによってインスタンス化される各セル項目を定義するテンプレートを提供する。モデル・インデックスは、アクセス可能なindex プロパティとして公開されます。rowcolumn も同様です。データ・モデルのタイプに応じて、モデルのプロパティも利用可能です。

デリゲートは、implicitWidthimplicitHeight を使用して、そのサイズを指定する必要があります。TableView はその情報に基づいて項目をレイアウトします。明示的な幅や高さの設定は無視され、上書きされます。

デリゲートの内部では、オプションで以下のプロパティを1つ以上追加することができます。TableView は、これらのプロパティの値を変更して、デリゲートがどの状態にあるかを通知します。これは、デリゲートが自身の状態に応じて異なるレンダリングを行うために使用することができます。

  • required property bool current -true デリゲートが以下の状態にある場合。current.
  • required property bool selected -true もしデリゲートがselected.
  • required property bool editing -true デリゲートが編集中の場合。edited.
  • required property bool containsDrag -true 列または行が現在このデリゲート上でドラッグされている場合。このプロパティはHorizontalHeaderViewVerticalHeaderView でのみサポートされています。

次の例では、これらのプロパティの使い方を示します:

delegate: Rectangle {
    required property bool current
    required property bool selected
    border.width: current ? 1 : 0
    color: selected ? palette.highlight : palette.base
}

注意: デリゲートは必要に応じてインスタンス化され、いつでも破棄することができます。reuseItems プロパティがtrue に設定されている場合にも再利用されます。 したがって、デリゲートに状態情報を保存することは避けるべきです。

Row heights and column widthsReusing items 、および必須プロパティも参照してください


editTriggers : enumeration [default: TableView.DoubleTapped | TableView.EditKeyPressed., since 6.5]

このプロパティは、ユーザがセルの編集を開始できるさまざまな方法を保持する。以下の値の組み合わせが可能です:

定数説明
TableView.NoEditTriggers- ユーザがセルの編集を開始できない。この値が設定されると、TableView は、ユーザ操作への応答として編集デリゲートを開いたり閉じたりしません。しかし、アプリケーションはedit() とcloseEditor() を手動で呼び出すことができます。
TableView.SingleTapped- ユーザはセルをシングル・タップして編集できます。
TableView.DoubleTapped- ユーザはセルをダブル・タップして編集できます。
TableView.SelectedTapped- ユーザはselected cell をタップして編集できます。
TableView.EditKeyPressed- 編集キーのいずれかを押すことで、current cell を編集できる。編集キーは OS によって決定されるが、通常はQt::Key_EnterQt::Key_Return である。
TableView.AnyKeyPressed- セル・ナビゲーション・キー以外のキーを押すことで、current cell を編集できる。押されたキーはedit delegate 内のフォーカス・オブジェクトにも送られる。

TableView.SelectedTappedTableView.EditKeyPressedTableView.AnyKeyPressed が何らかの効果を持つためには、TableViewselection model が割り当てられている必要があります。これらはcurrent index が設定されていることに依存するからです。キーイベントを受け取るためには、TableViewQQuickItem::activeFocus を持つ必要があります。

セルを編集するとき、ユーザーはQt::Key_Tab またはQt::Key_Backtab を押してデータをcommit 、編集を次のセルに移すことができる。この動作はTableViewQQuickItem::activeFocusOnTabfalse に設定することで無効にできる。

注: セルを編集可能にするためには、delegateedit delegate が添付され、モデルがQAbstractItemModel::flags() からQt::ItemIsEditable を返す必要があります(下に例を示します)。指定されたトリガーをアクティブにした後でもセルを編集できない場合は、edit() を明示的に(例えば Button/TapHandler から)呼び出してみてください。そうすることで、セルが編集できない理由を説明する警告が表示されます。

Qt::ItemFlags QAbstractItemModelSubClass::flags(const QModelIndex &index) const override
{
    Q_UNUSED(index)
    return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable;
}

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

TableView::editDelegate,TableView::commit,Editing cellsも参照してください


keyNavigationEnabled : bool [since 6.4]

このプロパティは、ユーザーがキーボードを使ってthe current index を変更できるかどうかを制御するために設定することができます。デフォルト値はtrue です。

注: TableView がキーボードナビゲーションをサポートするためには、ItemSelectionModelselectionModel に割り当てる必要があります。

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

Keyboard navigation,selectionModel,selectionBehavior,pointerNavigationEnabled,interactiveも参照してください


leftColumn : int

このプロパティは、ビュー内で現在表示されている左端の列を保持します。

rightColumn,topRow,bottomRowも参照して ください。


model : model

このプロパティは、テーブルにデータを提供するモデルを保持します。

このモデルは、ビューの項目を作成するために使用されるデータのセットを提供します。モデルは、TableModelListModelObjectModel を使ってQMLで直接作成することもできますし、C++のカスタム・モデル・クラスを使って提供することもできます。C++ モデルはQAbstractItemModel のサブクラスか、単純なリストでなければなりません。

データモデル」も参照してください


pointerNavigationEnabled : bool [since 6.4]

このプロパティは、ユーザーがマウスやタッチを使ってthe current index を変更できるかどうかを制御するために設定することができます。デフォルト値はtrue です。

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

selectionModel,keyNavigationEnabled,interactiveも参照してください


resizableColumns : bool [since 6.5]

このプロパティは、ユーザーがセル間をドラッグして列のサイズを変更できるかどうかを保持します。デフォルト値はfalse です。

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


resizableRows : bool [since 6.5]

このプロパティは、ユーザーがセル間をドラッグして行のサイズを変更できるかどうかを保持します。デフォルト値はfalse です。

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


reuseItems : bool

このプロパティは、delegate からインスタンス化されたアイテムを再利用するかどうかを保持します。false に設定すると、現在プールされているアイテムは破棄されます。

Reusing items,TableView::pooled,TableView::reusedも参照してください


rightColumn : int

このプロパティは、ビュー内で現在表示されている一番右の列を保持します。

leftColumntopRow 、およびbottomRowも参照して ください。


rowHeightProvider : var

このプロパティは、モデル内の各行の行の高さを返す関数を保持することができます。この関数は、TableView が特定の行の高さを知りたいときに呼び出されます。この関数は、TableView が高さを知る必要のある引数、row を取ります。

Qt 5.13以降、特定の行を非表示にしたい場合、その行の高さを0 。負の数を返すと、TableView はデリゲート項目に基づいて高さを計算します。

注意: rowHeightProviderは通常、行がロードされようとするとき(またはレイアウトを行うとき)に2回呼び出されます。まず、行が表示可能かどうか、ロードされるべきかどうかを知るためです。そして2つ目は、すべての項目がロードされた後の行の高さを決定するためです。デリゲートアイテムのサイズに基づいて行の高さを計算する必要がある場合は、すべてのアイテムがロードされたときに、2回目の呼び出しを待つ必要があります。これを確認するには、isRowLoaded(row) を呼び出します。

rowHeightProvider,isRowLoaded(),Row heights and column widthsも参照して ください。


rowSpacing : real

このプロパティは、行の間隔を保持します。

デフォルト値は0 です。


rows : int [read-only]

このプロパティは、テーブルの行数を保持します。

注: rows は通常、モデルの行数と同じですが、保留中のモデル変更がすべて処理されるまで、一時的に異なることがあります。

このプロパティは読み取り専用です。


selectionBehavior : enumeration [since 6.4]

このプロパティは、ユーザーがセル、行、または列を選択できるかどうかを保持します。

定数説明
TableView.SelectionDisabledユーザは選択を実行できない
TableView.SelectCells(デフォルト値) ユーザは個々のセルを選択できる。
TableView.SelectRowsユーザは行のみを選択できる
TableView.SelectColumnsユーザーが選択できるのは列のみ

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

Selecting items,selectionMode,selectionModel,keyNavigationEnabledも参照してください


selectionMode : enumeration [since 6.6]

selectionBehaviorTableView.SelectCells に設定されている場合、このプロパティは、ユーザーが一度に 1 つのセルを選択できるか、複数のセルを選択できるかを保持します。selectionBehaviorTableView.SelectRows に設定されている場合、このプロパティは、ユーザが一度に1つの行を選択できるか、複数の行を選択できるかを保持します。selectionBehaviorTableView.SelectColumns に設定されている場合、このプロパティは、ユーザが一度に1つの列を選択できるか、複数の列を選択できるかを保持する。

以下のモードが利用可能である:

定数説明
TableView.SingleSelectionユーザは単一のセル、行、列を選択できる。
TableView.ContiguousSelection連続した1つのセル・ブロックを選択できる。既存の選択範囲は、Shift 修飾子を押しながら選択することで、大きくしたり小さくしたりすることができます。
TableView.ExtendedSelection(デ フ ォ ル ト 値) 複数のセルブ ロ ッ ク を選択で き ます。Shift 修飾子を押しながら選択することで、既存の選択範囲を大きくしたり小さくしたりすることができます。Control 修飾子を押しながら選択することで、現在の選択範囲をクリアすることなく、新しい選択ブロックを開始することができます。

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

Selecting items,selectionBehavior,selectionModel,keyNavigationEnabledも参照してください


selectionModel : ItemSelectionModel [since 6.2]

このプロパティを設定することで、どのデリゲート項目を選択状態として表示し、どの項目を現在の状態として表示するかを制御することができます。デリゲートにrequired property bool selected が定義されている場合、TableView は、選択モデル内の対応するモデルアイテムの選択状態と同期を保ちます。デリゲートにrequired property bool current が定義されている場合、TableView は selectionModel.currentIndex と同期を保ちます。

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

Selecting items,SelectionRectangle,keyNavigationEnabled,pointerNavigationEnabledも参照してください


syncDirection : Qt::Orientations

syncViewTableView に設定されている場合、このプロパティは両方のテーブルのフリック方向の同期を制御します。デフォルトはQt.Horizontal | Qt.Vertical で、どちらかのテーブルをどちらかの方向にフリックすると、もう一方のテーブルも同じ方向に同じ量だけフリックされる。

このプロパティとsyncView を使用すると、オーバーシュート/アンダーシュート、速度、加速/減速、リバウンドアニメーションなどの違いに関係なく、2つのtableViewをフリックする際に互いにスムーズに同期させることができます。

典型的な使用例は、テーブルと一緒に複数のヘッダーをフリックさせることです。

syncViewも参照してください


syncView : TableView

TableView のこのプロパティが別のTableView に設定されている場合、両方の表は、syncDirection に従って、フリック、列の幅/行の高さ、間隔に関して同期します。

syncDirectionQt.Horizontal を含む場合、現在の tableView の列幅、列間隔、水平フリックの動きは syncView のものと同期します。

syncDirectionQt.Vertical が含まれている場合、現在の tableView の行の高さ、行の間隔、垂直方向のフリックの動きは syncView のものと同期します。

syncDirectionも参照


topRow : int

このプロパティは、現在ビュー内に表示されている最上部の行を保持します。

leftColumn,rightColumn,bottomRowも参照


Attached Property ドキュメント

TableView.editDelegate : Component

このattachedプロパティは、編集デリゲートを保持します。編集開始時にインスタンス化され、編集するデリゲートの親になります。indexrowcolumn など、TableView delegate と同じ必須プロパティをサポートしています。displayedit のようなモデルのプロパティも利用可能です(モデルによって公開されるrole names に依存します)。

編集は、editTriggers によって指定されたアクションが満たされ、現在のセルが編集可能であるときに開始される。

注: セルを編集可能にするためには、モデルがQAbstractItemModel::flags() をオーバーライドし、Qt::ItemIsEditable を返す必要があります。

編集デリゲートを手動で開いたり閉じたりするには、それぞれedit() とcloseEditor() を呼び出します。この場合、Qt::ItemIsEditable フラグは無視されます。

編集は、ユーザーがQt::Key_Enter またはQt::Key_Return (また、TableViewQQuickItem::activeFocusOnTab が設定されている場合は、Qt::Key_Tab またはQt::Key_Backtab )を押すと終了します。この場合、TableView::commit シグナルが発行され、editデリゲートは変更されたデータをモデルに書き戻すことで応答することができます。他の理由で編集が終了した場合(例えば、ユーザーがQt::Key_Escape を押した場合)、シグナルは発せられません。どのような場合でも、最後にdestruction() が発行されます。

editデリゲートが表示されている間、その下にあるセルはまだ見えているので、editデリゲートが半透明であるか、そうでなければセル全体を覆っていない場合、透けて見えます。これを望まない場合は、編集デリゲートのルートアイテムを無地のRectangle 、またはTableView delegate. の中のいくつかのアイテムを隠すことができます。後者は、その中にrequired property bool editing プロパティを定義し、子アイテムのvisible プロパティにバインドすることで行うことができます。次のスニペットはその方法を示しています:

        delegate: Rectangle {
            implicitWidth: 100
            implicitHeight: 50

            required property bool editing

            Text {
                id: textField
                anchors.fill: parent
                anchors.margins: 5
                text: display
                visible: !editing
            }

            TableView.editDelegate: TextField {
                x: textField.x
                y: textField.y
                width: textField.width
                height: textField.height
                text: display
                TableView.onCommit: display = text
            }
        }

editデリゲートがインスタンス化されると、TableView QQuickItem::forceActiveFocus ()が呼び出されます。アクティブフォーカスをeditデリゲートの子に設定したい場合は、editデリゲートをFocusScope

editTriggers,TableView::commit,edit(),closeEditor(),Editing cellsも参照してください


TableView.view : TableView

このアタッチされたプロパティは、デリゲートのインスタンスを管理するビューを保持します。これは、デリゲートの各インスタンスにアタッチされます。


シグナル・ドキュメント

[since 6.8] columnMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex)

このシグナルは、カラムが移動したときに発行されます。列の論理インデックスはlogicalIndex で指定され、古いインデックスはoldVisualIndex で指定され、新しいインデックス位置はnewVisualIndex で指定されます。

注: 対応するハンドラはonColumnMoved です。

このシグナルはQt 6.8で導入されました。


[since 6.5] layoutChanged()

このシグナルは、loaded の行と列のレイアウトが変更された可能性があるときに発行されます。これは特にforceLayout() が呼び出された時ですが、例えば行や列のサイズを変更した時や、行や列がビューポートに入ったり出たりした時にも発生します。

このシグナルは、例えばオーバーレイのジオメトリを更新するために使用できます。

注意: 対応するハンドラはonLayoutChanged です。

このシグナルはQt 6.5で導入されました。

forceLayout() およびOverlays and underlaysも参照してください


[since 6.8] rowMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex)

このシグナルは、行が移動された時に発せられます。行の論理インデックスはlogicalIndex で指定され、古いインデックスはoldVisualIndex で指定され、新しいインデックスの位置はnewVisualIndex で指定されます。

注: 対応するハンドラはonRowMoved です。

このシグナルはQt 6.8で導入されました。


付属シグナルのドキュメント

commit()

このシグナルはedit delegate

このアタッチドシグナルは、edit delegate がアクティブで、ユーザーがQt::Key_Enter またはQt::Key_Return を押したときに発せられます。また、TableViewQQuickItem::activeFocusOnTab が設定されていて、ユーザーがQt::Key_Tab またはQt::Key_Backtab を押したときにも発せられます。

前述の理由以外で編集が終了した場合、このシグナルは発せられません。これには、ユーザがQt::Key_Escape を押した場合、デリゲートの外側をタップした場合、編集中の行や列が削除された場合、アプリケーションがcloseEditor()を呼び出した場合などが含まれます。

シグナルを受信すると、editデリゲートは変更されたデータをモデルに書き戻す必要があります。

注意: このプロパティは、edit delegate にアタッチされるべきで、delegate にアタッチされるべきではありません。

注: 対応するハンドラはonCommit です。

TableView::editDelegateeditTriggersEditing cellsも参照して ください。


pooled()

このシグナルは、アイテムが再利用プールに追加された後に発行される。アイテム内部で進行中のタイマーやアニメーションを一時停止したり、再利用できないリソースを解放したりするために使用できます。

このシグナルは、reuseItems プロパティがtrue の場合のみ発行されます。

注: 対応するハンドラはonPooled です。

Reusing itemsreuseItemsreusedも参照して ください。


reused()

このシグナルはアイテムが再使用された後に発せられる。この時点で、アイテムはプールから取り出され、コンテンツビュー内に配置され、インデックス、行、列などのモデルプロパティが更新されています。

モデルによって提供されないその他のプロパティは、アイテムが再利用されても変更されません。デリゲートの内部に状態を保存することは避けるべきですが、もし保存する場合は、このシグナルを受信した際に手動でその状態をリセットしてください。

このシグナルは、アイテムが最初に作成されたときではなく、アイテムが再利用されたときに発行されます。

このシグナルは、reuseItems プロパティがtrue の場合のみ発行されます。

注: 対応するハンドラはonReused です。

Reusing itemsreuseItemspooledも参照


メソッド・ドキュメント

[since 6.4] point cellAtIndex(QModelIndex modelIndex)

モデルのmodelIndex に対応するビューのセルを返します。するための便利な関数です:

Qt.point(columnAtIndex(modelIndex), rowAtIndex(modelIndex))

セルとは、単に行と列を1つの型にまとめたpoint のことです。

注: point.x は列に対応付けられ、point.y は行に対応付けられます。

このメソッドは Qt 6.4 で導入されました。


Point cellAtPosition(point position, bool includeSpacing)

テーブル内の指定されたposition のセルを返します。positioncontentItem からの相対値である必要があります。loaded のセルがposition と交差しない場合、返り値はpoint(-1, -1) になります。

includeSpacingtrue に設定されている場合、セルのバウンディング・ボックスには、隣接するrowSpacingcolumnSpacing の各辺の半分が含まれるとみなされる。デフォルト値はfalse である。

注: TableView にアタッチされた入力ハンドラーは、ビューではなくcontentItem にそれ自身をインストールする。そのため、ハンドラーによって報告された位置は、mapping なしで、この関数の呼び出しで直接使用することができます。

columnSpacing およびrowSpacingも参照


Point cellAtPosition(real x, real y, bool includeSpacing)

cellAtPosition(Qt.point(x, y), includeSpacing) を呼び出すための便利な機能です。


[since 6.8] clearColumnReordering()

以前に適用された列の並べ替えをリセットします。

注意: syncView が設定されている場合、この関数の呼び出しは対応するビュー項目に転送され、列の順序がリセットされます。

このメソッドは Qt 6.8 で導入されました。


clearColumnWidths()

setColumnWidth() で設定されたすべての列幅をクリアします。

注意: syncViewQt.Horizontal syncDirection と共に設定されている場合、同期ビューが列幅を制御します。そのため、この関数を呼び出すと、代わりに同期ビューに転送されます。

setColumnWidth()、clearRowHeights()、Row heights and column widthsも参照のこと


clearRowHeights()

setRowHeight() で設定された行の高さをすべてクリアする。

注意: Qt.Vertical syncDirection とともにsyncView が設定されている場合、シンク・ビューが行の高さを制御する。そのため、この関数を呼び出すと、同期ビューに転送されます。

setRowHeight()、clearColumnWidths()、Row heights and column widthsも参照のこと


[since 6.8] clearRowReordering()

以前に適用された行の並び替えをリセットする。

注意: syncView が設定されている場合、この関数への呼び出しは対応するビュー項目に転送され、行の順序がリセットされます。

このメソッドは Qt 6.8 で導入されました。


[since 6.5] closeEditor()

ユーザーがセルを編集している場合、この関数を呼び出すと編集が停止され、edit delegateインスタンスが破棄されます。

このメソッドはQt 6.5で導入されました。

edit()、TableView::editDelegateEditing cellsも参照してください


[since 6.4] int columnAtIndex(QModelIndex modelIndex)

モデルのmodelIndex に対応するビューの列を返します。

このメソッドは Qt 6.4 で導入されました。

rowAtIndex() およびindex()も参照して ください。


[since 6.2] real columnWidth(int column)

与えられたcolumn の幅を返します。列がロードされていない(つまり表示されていない)場合、戻り値は-1 になります。

このメソッドは Qt 6.2 で導入されました。

setColumnWidth(),columnWidthProvider,implicitColumnWidth(),isColumnLoaded(),Row heights and column widthsも参照してください


[since 6.5] edit(QModelIndex modelIndex)

この関数は、modelIndex を表すセルの編集セッションを開始します。ユーザーがすでに別のセルを編集している場合、そのセッションは終了する。

通常、editTriggers を使用することで、編集セッションを開始するさまざまな方法を指定することができます。それで十分でない場合は、この関数を使うことができる。セル編集を完全に制御し、TableView が干渉しないようにするには、editTriggersTableView.NoEditTriggers に設定する。

注: selection modelcurrent indexmodelIndex に変更されます。

このメソッドは Qt 6.5 で導入されました。

closeEditor()、editTriggersTableView::editDelegate 、およびEditing cellsも参照のこと


qreal explicitColumnWidth(int column)

setColumnWidth() で設定したcolumn の幅を返す。columnWidthProvider が使用されている場合、この幅は実際の列の幅と異なる可能性があります。列の実際の幅を取得するには、columnWidth() を使用します。

戻り値が0 の場合は、そのカラムが非表示に設定されていることを意味します。-1 に等しい返り値は、カラムに明示的な幅が設定されていないことを意味します。

注意: Qt.Horizontal syncDirection とともにsyncView が設定されている場合、カラムの幅はシンク・ビューが制御します。そのため、この関数を呼び出すと、代わりに同期ビューに転送されます。

setColumnWidth()、columnWidth()、Row heights and column widthsも参照のこと


qreal explicitRowHeight(int row)

setRowHeight() で設定したrow の高さを返す。rowHeightProvider を使用している場合、この高さは実際の列の高さとは異なる可能性があります。行の実際の高さを取得するには、rowHeight() を使用します。

返り値が0 の場合は、その行が非表示になったことを意味します。-1 に等しい返り値は、行に明示的な高さが設定されていないことを意味します。

注意: Qt.Vertical syncDirection とともにsyncView が設定されている場合、シンクビューが行の高さを制御します。したがって、その場合、この関数の呼び出しは同期ビューに転送されます。

setRowHeight(),rowHeight(),Row heights and column widthsも参照のこと


forceLayout()

モデルの変更に対する応答は、フレームごとに1回だけ処理されるようにバッチ処理されます。これは、スクリプトの実行中にTableView が変更を表示するのを遅らせることを意味します。rowSpacingleftMargin などのプロパティを変更する場合も同様です。

このメソッドは、TableView にレイアウトの即時更新を強制し、最近の変更が反映されるようにします。

この関数を呼び出すと、表示されている各行と各列のサイズと位置が再評価されます。これは、rowHeightProvider またはcolumnWidthProvider に割り当てられた関数が、すでに割り当てられているものと異なる値を返す場合に必要となります。


[since 6.2] real implicitColumnWidth(int column)

与えられたcolumn の暗黙の幅を返す。これは、その列内の現在loaded のデリゲート項目の中で見つかった最大のimplicitWidth です。

column がロードされていない(したがって表示されていない)場合、戻り値は-1 になります。

このメソッドは Qt 6.2 で導入されました。

columnWidth()、isRowLoaded()、Row heights and column widthsも参照してください


[since 6.2] real implicitRowHeight(int row)

与えられたrow の暗黙の高さを返します。これは、その行内の現在loaded のデリゲート項目の中で見つかった最大のimplicitHeight です。

row がロードされていない(したがって表示されていない)場合、戻り値は-1 です。

このメソッドは Qt 6.2 で導入されました。

rowHeight()、isColumnLoaded()、Row heights and column widthsも参照してください


[since 6.4.3] QModelIndex index(int row, int column)

ビューのrowcolumn に対応するQModelIndex を返します。

row と は、ビューの行と列(テーブルの行と列)でなければならず、モデルの行と列であってはなりません。しかし、 のサブクラス( のように、データモデルが、ツリー構造をテーブルにフラットにする内部プロキシモデルにラップされている)の場合は、モデルインデックスを解決するためにこの関数を使用する必要があります。column TableView model.index(row, column). TableView TreeView

このメソッドはQt 6.4.3で導入されました。

rowAtIndex() およびcolumnAtIndex()も参照してください


[since 6.2] bool isColumnLoaded(int column)

与えられたcolumn がロードされていればtrue を返します。

カラムがロードされるのは、TableView 、ビュー内でカラムを表示するために必要なデリゲート項目がロードされた時です。これは通常、カラムがユーザに見えることを意味しますが、常に見えるわけではありません。

この関数は、columnWidthProvider などから、カラムのデリゲートアイテムを反復処理する必要がある場合に、デリゲートアイテムが反復処理に利用可能であることを確認するために使用することができます。

このメソッドは Qt 6.2 で導入されました。


[since 6.2] bool isRowLoaded(int row)

与えられたrow がロードされている場合、true を返します。

TableView 、ビュー内に行を表示するために必要なデリゲート項目がロードされると、行はロードされます。これは通常、行がユーザーに見えることを意味しますが、常に見えるわけではありません。

この関数は、rowHeightProvider などから、ある行のデリゲート項目を反復処理する必要がある場合に、デリゲート項目が反復処理に利用可能であることを確認するために使用することができます。

このメソッドは Qt 6.2 で導入されました。


Item itemAtCell(point cell)

ロードされていればcell のデリゲート項目を返し、そうでなければnull を返します。

注意: 通常、ビューに表示されているアイテムだけがロードされます。セルがビューからフリックされると、中のアイテムはアンロードされるか、リサイクル・プールに置かれます。そのため、戻り値は決して保存されるべきではありません。


[since 6.5] Item itemAtIndex(QModelIndex index)

index を表すセルのインスタンス化されたデリゲート・アイテムを返す。アイテムがloaded でない場合、値はnull になる。

注意: 通常は、ビューに表示されている項目だけがロードされる。セルがビューからフリックされると、中のアイテムはアンロードされるか、リサイクル・プールに置かれる。そのため、戻り値は決して保存されるべきではありません。

注: modelQAbstractItemModel でない場合、itemAtCell(Qt.point(column, row)) を使用することもできる。ただし、point.x は列に、point.y は行にマッピングされることに注意してください。

このメソッドはQt 6.5で導入されました。


[since 6.4] QModelIndex modelIndex(point cell)

するための便利な関数です:

index(cell.y, cell.x)

cell は、単に行と列を1つの型にまとめたpoint です。

注: point.x は列に対応し、point.y は行に対応します。

このメソッドは Qt 6.4 で導入されました。

index()も参照してください


[since 6.8] moveColumn(int source, int destination)

列をsource からdestination の位置に移動します。

注意: syncView が設定されている場合、同期ビューは列の並び替えのための内部インデックスマッピングを制御します。そのため、この関数を呼び出すと、代わりに同期ビューに転送されます。

このメソッドは Qt 6.8 で導入されました。


[since 6.8] moveRow(int source, int destination)

行をsource からdestination の位置に移動します。

注意: syncView が設定されている場合、sync view は行の並び替えのための内部インデックスマッピングを制御します。そのため、その場合、この関数の呼び出しは、代わりに同期ビューに転送されます。

このメソッドはQt 6.8で導入されました。


positionViewAtCell(point cell, PositionMode mode, point offset, rect subRect)

cellmode で指定された位置になるように、contentXcontentY の位置を指定します。mode は、以下のいずれかの組み合わせになります:

定数説明
TableView.AlignLeftセルをビューの左に配置する。
TableView.AlignHCenterセルをビューの水平方向の中央に配置する。
TableView.AlignRightセルをビューの右側に配置する。
TableView.AlignTopセルをビューの上部に配置する。
TableView.AlignVCenterセルをビューの垂直方向の中央に配置する。
TableView.AlignBottomセルをビューの下部に配置する。
TableView.AlignCenter(TableView.AlignHCenter |TableView.AlignVCenter) と同じ。
TableView.Visibleセルの一部が表示されている場合は何もしない。そうでなければ、セル全体が見えるようにコンテント・アイテムを動かす。
TableView.Containセル全体が表示されている場合は何もしない。そうでなければ、セル全体が見えるようにコンテント・アイテムを移動させる。セルがビューより大きい場合は、セルの左上部分が優先される。

垂直方向の配置が指定されていない場合、垂直方向の配置は無視される。水平方向の配置も同様です。

オプションとして、offset を指定すると、contentXcontentYをターゲット・アライメントよりピクセル数分余分に移動させることができます。例えば、セル[10, 10]が左上隅に5pxの余白を持って来るようにビューを配置したい場合、このようにすることができます:

positionViewAtCell(Qt.point(10, 10), TableView.AlignLeft | TableView.AlignTop, Qt.point(-5, -5))

Qt 6.4では、セル全体の外接矩形ではなく、cell 内部の矩形にsubRect を指定して配置することができます。これは、例えばセルがビューよりも大きく、その特定の部分を確実に表示したい場合に便利です。subRectvalid を考慮する必要があります。

注意: contentXや contentYを使って特定のセルにビューを配置することは推奨されない。テーブルの先頭から項目を削除しても、他のすべての項目が再配置されるわけではないので、これは信頼性に欠ける。TableView 、速度を最適化するために、行や列をおおよその位置に配置することもある。唯一の例外は、セルがすでにビューに表示されている場合です。これはitemAtCell() を呼び出すことで、前もって確認することができます。

メソッドは、コンポーネントが完了した後にのみ呼び出す必要があります。起動時にビューを配置するには、Component.onCompletedでこのメソッドを呼び出します。例えば、最後にビューを配置する場合:

Component.onCompleted: positionViewAtCell(Qt.point(columns - 1, rows - 1), TableView.AlignRight | TableView.AlignBottom)

注: この関数の第2引数は、以前はQt.Alignmentでした。後方互換性のために、この列挙型はまだ使用できます。PositionModeを使うように変更されたのはQt 6.4からです。

animateも参照して ください。


positionViewAtColumn(int column, PositionMode mode, real offset, rect subRect)

mode,offset,subRect で指定された位置にcolumn が来るように {Flickable::}{contentX} を配置します。

を呼び出すための便利なメソッドです。

positionViewAtCell(Qt.point(column, 0), mode & Qt.AlignHorizontal_Mask, offset, subRect)

[since 6.5] positionViewAtIndex(QModelIndex index, PositionMode mode, point offset, rect subRect)

indexmode,offset,subRect で指定された位置に来るようにビューを配置します。

を呼び出すための便利なメソッドです。

positionViewAtRow(rowAtIndex(index), mode & Qt.AlignVertical_Mask, offset.y, subRect)
positionViewAtColumn(columnAtIndex(index), mode & Qt.AlignVertical_Mask, offset.x, subRect)

このメソッドはQt 6.5で導入されました。


positionViewAtRow(int row, PositionMode mode, real offset, rect subRect)

rowmode,offset,subRect で指定された位置にあるように {Flickable::}{contentY} を配置します。

を呼び出すための便利なメソッドです。

positionViewAtCell(Qt.point(0, row), mode & Qt.AlignVertical_Mask, offset, subRect)

[since 6.4] int rowAtIndex(QModelIndex modelIndex)

モデルのmodelIndex に対応するビューの行を返します。

このメソッドは Qt 6.4 で導入されました。

columnAtIndex() およびindex()も参照してください


[since 6.2] real rowHeight(int row)

与えられたrow の高さを返します。行がロードされていない(つまり表示されていない)場合、戻り値は-1 になります。

このメソッドは Qt 6.2 で導入されました。

setRowHeight(),rowHeightProvider,implicitRowHeight(),isRowLoaded(),Row heights and column widthsも参照してください


setColumnWidth(int column, real size)

column の明示的な列幅をsize に設定します。

この関数で設定した値を読み返したい場合は、explicitColumnWidth ()を使用する必要があります。columnWidth() は列の実際のサイズを返しますが、columnWidthProvider が設定されている場合は異なる可能性があります。

TableViewcolumn の幅を解決する必要がある場合、まずcolumnWidthProvider を呼び出そうとします。プロバイダが設定されていない場合のみ、この関数で設定された幅がデフォルトで使用されます。ただし、プロバイダ内からexplicitColumnWidth ()を呼び出すことができ、必要であれば、値が常に一定の間隔内に収まるようにするなど、値を調整することができる。以下のスニペットは、その方法の例を示しています:

columnWidthProvider: function(column) {
    let w = explicitColumnWidth(column)
    if (w >= 0)
        return Math.max(100, w);
    return implicitColumnWidth(column)
}

size0 と等しい場合、列は非表示になります。size-1 と等しい場合、カラムはimplicitColumnWidth() を使用するようにリセットされます。モデルのサイズ外のカラムのサイズを指定することができます。

注: model を変更しても、設定したサイズはクリアされません。サイズをクリアするには、clearColumnWidths() を明示的に呼び出す必要があります。

注意: Qt.Horizontal syncDirection とともにsyncView が設定されている場合、シンク・ビューが列幅を制御します。そのため、この関数を呼び出すと、代わりに同期ビューに転送されます。

注意: 数が多いモデルの場合、setColumnWidth() を使用して起動時にすべての列の幅を設定するのは最適とは言えません。これは起動時間とメモリ(すべての幅を保存するため)を消費します。よりスケーラブルな方法は、代わりにcolumnWidthProvider を使うか、デリゲートの暗黙の幅に依存することです。columnWidthProvider は必要に応じて呼び出されるだけで、モデルのサイズに影響されることはありません。

columnWidth(),explicitColumnWidth(),setRowHeight(),clearColumnWidths(),Row heights and column widthsも参照


setRowHeight(int row, real size)

row 行の明示的な行の高さをsize に設定します。

この関数で設定した値を読み返したい場合は、explicitRowHeight() を使用します。rowHeight()は、行の実際の高さを返します。rowHeightProvider が設定されている場合は、高さが異なる可能性があります。

TableViewrow の高さを解決する必要がある場合、まずrowHeightProvider を呼び出そうとします。プロバイダが設定されていない場合のみ、この関数で設定された高さがデフォルトで使用されます。ただし、プロバイダ内からexplicitRowHeight ()を呼び出すことができ、必要に応じて、値が常に一定の間隔内に収まるようにするなど、値を調整することができます。以下のスニペットは、その方法の例を示しています:

rowHeightProvider: function(row) {
    let h = explicitRowHeight(row)
    if (h >= 0)
        return Math.max(100, h);
    return implicitRowHeight(row)
}

size0 と等しい場合、行は非表示になります。size-1 と等しい場合、行はimplicitRowHeight() を使用するようにリセットされます。モデルのサイズ外の行については、行のサイズを指定することができます。

注意: model を変更しても、設定したサイズはクリアされません。サイズをクリアするには、clearRowHeights() を明示的に呼び出す必要があります。

注: Qt.Vertical syncDirection とともにsyncView が設定されている場合、同期ビューが行の高さを制御します。そのため、この関数を呼び出すと、代わりに同期ビューに転送されます。

注意: 数が多いモデルの場合、setRowHeight() を使用して起動時にすべての行の高さを設定すると、 最適でないことがあります。これは起動時間と(すべての高さを保存するための)メモリを消費します。よりスケーラブルな方法は、rowHeightProvider を使用するか、デリゲートの暗黙の高さに依存することです。rowHeightProvider は必要に応じて呼び出されるだけで、モデルのサイズに影響されることはありません。

rowHeight(),explicitRowHeight(),setColumnWidth(),Row heights and column widthsも参照して ください。


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