From C++ (Qt):
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
/*
* I have omitted the code about connection with the database and all for ease of
* viewing the code.
*/
// My own function for filling in the data in the `QSqlQueryModel`
QSqlQueryModel* model = new QSqlQueryModel;
QString binid = "B1";
QString query = "SELECT t1.BinId, t1.PartitionId, t2.UnitId, t2.ItemCount FROM Bin_Partitions AS t1 "
"INNER JOIN Partition_Units AS t2 ON t1.PartitionId = t2.PartitionId "
"WHERE t1.BinId ='" + binid + "'";
model->setQuery(query);
/*
* I can see that the query runs successfully because the following
* QTableView DOES get populated properly.
*/
// Use QTableView to visualize
QTableView *view = new QTableView;
view->setModel(model);
view->show();
QQmlApplicationEngine engine;
// Passing the same model to QML for displaying in the TableView.
engine.rootContext()->setContextProperty ("SQQL", model);
engine.load(QUrl(QStringLiteral("/home/.../main.qml")));
QObject *topLevel = engine.rootObjects ().value (0);
QQuickWindow *window = qobject_cast <QQuickWindow *> (topLevel);
return app.exec();
}
From QML:
import QtQuick 2.2
import QtQuick.Window 2.1
import QtQuick.Controls 1.2
Window
{
visible: true
width: 360
height: 360
color: "blue"
TableView
{
TableViewColumn{ role: "col1" ; title: "BinId" ; visible: true}
TableViewColumn{ role: "col2" ; title: "PartitionId" }
TableViewColumn{ role: "col3" ; title: "UnitId" }
TableViewColumn{ role: "col4" ; title: "ItemCount" }
model: SQQL
}
}
The TableView of QML shows up EMPTY!
I need help.
You have to subclass
QSqlQueryModel
and reimplementroleNames
anddata
methodsMySqlModel.h
main.qml