0

so 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);
    model->setTable(tableName);
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();


    int i=0;
    while (query.next()){
        model->setHeaderData(i, Qt::Vertical, query.value(i).toString());
        i++;
    }

   return   model;

}

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

TableView{
    id: table;
    width: parent.width -100
    height: parent.height -200
    anchors.horizontalCenter: parent.horizontalCenter
    anchors.top: parent.top
    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();
view->setModel(model);
view->show();

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

enter image description here

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
heczaco
  • 198
  • 1
  • 13

1 Answers1

0

You need to specify which columns to display with TableViewColumn. This is documented in TableView's documentation:

TableView {
    TableViewColumn {
        role: "title"
        title: "Title"
        width: 100
    }
    TableViewColumn {
        role: "author"
        title: "Author"
        width: 200
    }
    model: libraryModel
}
Mitch
  • 23,716
  • 9
  • 83
  • 122
  • doesn't work, and if I add these three lines in the c++ code : " QTableView *view = new QTableView(); view->setModel(model); view->show(); " a new view with the table appears, but the one on the window I made on qml doesn't seem to work – heczaco Jan 19 '16 at 16:06
  • You'll need to provide a complete example then. – Mitch Jan 19 '16 at 16:20