I want to display a subset of columns from an large existing C++ TableModel
in a new QML TableView
.
All the documenation and examples I've read override QAbstractItemModel::roleNames()
to expose model data associated with the roles as properties in QML.
The problem is that the legacy TableModel
's data()
function has a complex implementation tightly coupled to Qt::DisplayRole
:
\\...
QVariant LegacyModel::data(const QModelIndex& index, int role) {
switch(role) {
\\...
case Qt::DisplayRole:
switch(LegacyTableColumn.at(index.column())) {
\\ lots of stuff
}
}
\\...
}
\\...
As such, I'd prefer to avoid overriding QAbstractItemModel::roleNames()
as it will mean substantial refactoring of the above data()
function.
I have a QML view showing all the columns in each model row:
TableView {
anchors.fill: parent
model: LegacyModel
delegate: RowLayout {
implicitWidth: parent.width
Text {
text: model.display // i.e., inferred from Qt::DisplayRole
// can I access column data here somehow?
}
}
}
But I only want to display a small set of columns.
Is there a way to do that without overriding roleNames()
and using those as properties in the view?