所以我在 qmlfile 上有一个 tableview,我正在尝试从 c++ 设置模型。
我正在使用的模型是 QSqlTableModel,如果创建一个新的 tableview 并从 c++ 设置模型,它似乎可以工作,但是当我将模型传递给 qmlfile 中的模型属性时它不起作用,我想不出出为什么...
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{
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++ 中给出了它们也不会填充...。这是一个两张表的截图