2016-01-19 4 views
0

поэтому у меня есть tableview в qmlfile, я пытаюсь установить модель из C++.QtQuick настройка модели в TableView

Модель, которую я использую, это QSqlTableModel, если создать новое представление таблицы и установить модель из C++, похоже, это работает, но когда я передаю модель в свойство модели в qml-файле, она не работает, и я не могу понять, почему ...

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++ function Я получаю новое окно с таблицей, которая правильно отображает таблицу ... Я попробовал добавить столбцы с тем же именем, что и в C++, и они не будут заполняться либо ... вот скриншот обеих таблиц

enter image description here

ответ

0

Y ou необходимо указать, какие столбцы отображать с TableViewColumn. Это отражено в TableView's documentation:

TableView { 
    TableViewColumn { 
     role: "title" 
     title: "Title" 
     width: 100 
    } 
    TableViewColumn { 
     role: "author" 
     title: "Author" 
     width: 200 
    } 
    model: libraryModel 
} 
+0

не работает, а если добавить эти три строки в C++ код: "QTableView * вид = новый QTableView(); view-> setModel (модель); вид -> show(); появляется новое представление с таблицей, но одно из окна, которое я сделал на qml, похоже, не работает – heczaco

+0

Тогда вам нужно предоставить полный пример. – Mitch

+0

Позвольте мне изменить свой ответ ... – heczaco

Смежные вопросы