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ältListElement
s mit darin definierten Rollen.
Wenn der obige Code jedoch nicht kommentiert ist und einTableViewColumn
enn @ 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.