QtQuick在TableView

时间:2016-01-19 15:00:53

标签: c++ qt qml qtableview qsqltablemodel

所以我在qmlfile上有一个tableview,我试图从c ++设置模型。

我使用的模型是QSqlTableModel,如果创建一个新的tableview并从c ++设置模型它似乎工作,但是当我将模型传递给qmlfile中的模型属性时它不会#t; t工作,我无法弄清楚为什么......

c ++模型代码是:

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;

}

返回一个在c ++中有效的模型我创建一个tableview并分配模型但是当我这样做时:

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)
}

它不起作用,它只显示一个空表,即使我调试tableview模型时不是空的......

如果我添加:

QTableView *view =  new QTableView();
view->setModel(model);
view->show();

在c ++函数返回之前,我得到一个新窗口,其中有一个正确显示表格的表格...我尝试添加与c ++中相同的角色名称的列,并且他们也不会填充。 ...这里是两张桌子的截图

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要指定要使用TableViewColumn显示的列。这在TableView's documentation

中有记录
TableView {
    TableViewColumn {
        role: "title"
        title: "Title"
        width: 100
    }
    TableViewColumn {
        role: "author"
        title: "Author"
        width: 200
    }
    model: libraryModel
}