PDA

View Full Version : How to assign SQL query output model from Qt to QML's TableView?



TheIndependentAquarius
8th January 2015, 11:51
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.

anda_skoa
8th January 2015, 12:29
Where in your code do you map the columns from the SqlQueryModel into these roles you are using in QML?
Does the roleNames() method of the model return these?

Cheers,
_

TheIndependentAquarius
9th January 2015, 04:32
Where in your code do you map the columns from the SqlQueryModel into these roles you are using in QML?
Does the roleNames() method of the model return these?

Thankful for your time. I am sorry, I didn't know that something like that needs to be done.
Could you please point me out to a documentation which shows what and how needs to be done for
mapping the columns from the SqlQueryMode?

TheIndependentAquarius
9th January 2015, 07:04
I found the hints here:
http://qt-project.org/wiki/How_to_use_a_QSqlQueryModel_in_QML

It is done now.
Thanks.