Assigning roles to QSqlRelationalTable in QT5
-
I am using "this tutorial":http://qt-project.org/wiki/QML_and_QSqlTableModel to access a SQLite table and make it available in QML. The populates a number of empty rows, but I cannot get any of the fields (or roles) to display. Any idea what I could be missing?
My qml code is something like this, where "STRING" is a field, and a valid role that I can observe in the C++ object with the debugger:
@
TableView {
model: myModelTableViewColumn {
role: "STRING"
title: "STRING"
width: 160
}
}
@EDIT: See my own comment trails below, but I believe the question here boils down to: How can I assign roles to QSqlRelationalTableModel when "setRoleNames()":http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel-compat.html#setRoleNames has been deprecated?
-
I notice that when I inspect my QLSqlTableModel with the debugger, the roles have been updated. However, when I inspect the roles using the roleNames() method, I observe the six default role names (toolTip, display, edit, etc.)
Here's my code used to generate the role names. Notice I commented out the setRoleNames in the #ifndef QT5 directive. It was throwing a compiler error, and I was hoping that since I'm using QT5 it would be okay.
@
void QLSqlTableModel::generateRoleNames()
{
roles.clear();
int nbCols = this->columnCount();
for (int i = 0; i < nbCols; i++) {
roles[Qt::UserRole + i + 1] = QVariant(this->headerData(i, Qt::Horizontal).toString()).toByteArray();}
#ifndef HAVE_QT5
// setRoleNames(roles);
#endif
}
@ -
I overloaded roleNames() to return roles, so now the returned roles of that method are my 11 column names, rather than the 6 default roles. However, my data still does not show up in TableView. If I change the role name to one of the 6 default values, say "edit", then TableView is populated with a bunch of int values.
-
Ah, I think I see the problem. Roles is defined in the derived class, not QSQLRelationalTableModel class. So when I generatRoleNames, I'm not really doing anything. How then can I assign roleNames in the base class? "setRoleNames()":http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel-compat.html#setRoleNames function has been deprecated.
-
I ended up just overriding the roleNames() method.
@QHash<int, QByteArray> QLSqlTableModel::roleNames() const{
return roles;
}@