Important: Please read the Qt Code of Conduct -

Setting QSqlTableModel from c++ to .qml tableView

  • I have a tableview on a qmlfile, I'm trying to set the model from c++.

    The model I'm using is QSqlTableModel, if a create a new tableview and set the model from c++ it seems to work, but when I pass the model to the model property in the qmlfile it doesn't work and I can't figure out why...

    the c++ model code is:
    QSqlTableModel * SqlEventModel::getTableData(QString tableName, QTableView *item){

    	const QString queryStr = "SELECT sql FROM sqlite_master WHERE tbl_name = '" + tableName +"' AND type = 'table'" ;
    	QSqlQuery query(queryStr);
    	if (!query.exec())
    		qFatal("Query failed");
    	QSqlDatabase db = QSqlDatabase::database(":memory:");
    	QSqlTableModel *model = new QSqlTableModel(item, db);
    	int i=0;
    	while ({
    		model->setHeaderData(i, Qt::Vertical, query.value(i).toString());
       return   model;

    that returns a model which works if within c++ I create a tableview and assign the model but when I do this:

    	id: table;
    	width: parent.width -100
    	height: parent.height -200
    	anchors.horizontalCenter: parent.horizontalCenter
    	anchors.topMargin: 90
    	model: SqlEventModel.getTableData(GData.tName,table)

    it doesn't work, it just shows an empty table even though when I debug the tableview model is not empty...

    if I add:

    QTableView *view =  new QTableView();

    just before the return on the c++ function I get a new window with a table which properly displays the table... I tried adding columns with the same rolename that I give in c++ and they won't populate either.... here's a screenshot of both tables

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    To make models accessible to QML you have to do sum customization like described in the QtQuick Model Views Data documentation.

    QSqlTableModel example here