QML TableView mit dynamischer Spaltenanzahl

Ich habe versucht, eine QML zu verwendenTableView um ein @ anzuzeigQAbstractTableModel. Der fehlende Teil der Gleichung scheint zu sein, dass es nicht möglich ist, eine variable Anzahl von Spalten im @ zu habeTableView, trotz überschreibenQAbstractItemModel::roleNames, das Qt die Nummer und den Namen meiner Spalten mitteilen sollte. Ich habe versucht, dies nur mit QML zu testen:

import QtQuick 2.0
import QtQuick.Controls 1.1

Rectangle {
    anchors.fill: parent
    property real showImage: 1.0
    width: 500
    TableView {
        id: myTable
        model: myModel
        //        TableViewColumn {
        //            role: "title"; title: "Name"; width: 200
        //        }
    }

    ListModel {
        id: myModel
        ListElement {
            title: "item one"
        }
        ListElement {
            title: "item two"
        }
    }
}

Wenn ausgeführt wird, zeigt dies trotz des @ nichts TableView 's Modus enthältListElements mit darin definierten Rollen.

Wenn der obige Code jedoch nicht kommentiert ist und einTableViewColumnenn @ definiert ist, werden in der Spalte erwartungsgemäß Daten für diese Rolle angezeigt, in der Tabelle werden jedoch keine anderen Rollen angezeigt. Offensichtlich funktioniert das nur für eine statisch festgelegte Anzahl von Spalten und nicht für den Fall, dass die Anzahl der Spalten erst zur Laufzeit bekannt ist.

Das angegebene Beispiel ist im Grunde dasselbe wie in meinem realen Beispiel, außer dass mein Modell in C ++ definiert ist.

Es scheint, als ob dies bereits gefragt wurdeHie aber es hat keine Antwort erhalten.

BEARBEITEN Ich hatte versucht, eine Javascript-Funktion aufzurufen:

function addColumnToTable(roleName) {
    var columnString = 'import QtQuick 2.3; import QtQuick.Controls 1.2; TableViewColumn {role: "'
            + roleName + '"; title: "' + roleName + '"; width: 40}';
    var column = Qt.createQmlObject(
                columnString
                , myTable
                , "dynamicSnippet1")
    myTable.addColumn(column);
}

Aus C ++:

QVariant roleName = "name";
QObject *root = view->rootObject();
QMetaObject::invokeMethod(root, "addColumnToTable", Q_ARG(QVariant, roleName));

Dies erlaubte mir zumindest, dynamisch Spalten aus C ++ hinzuzufügen, obwohl dies nicht aus der Modell- / Ansichtsarchitektur heraus erfolgte. Yoanns Lösung ist jedoch weitaus besser.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage