【发布时间】:2017-01-16 21:10:42
【问题描述】:
我想在 QML-Tableview 中显示来自本地 db-File 的 SQL 数据,而不是想对 sql-database 进行一些编辑。 大约三周后我设法做到了:在 QML-Tableview 中显示我的数据。我不确定我是否真的需要对 QSqlTableModel 进行子类化,如果根本不需要子类化,我肯定会很高兴。
在我的 main.cpp 下面应该创建我的模型并直接添加一条记录。
// Create an instance of the SqlModel for accessing the data
SqlDataModel *sqlModel;
sqlModel = new SqlDataModel(0,base.database());
sqlModel->setTable("diaBaneDatabase");
sqlModel->setSort(0, Qt::AscendingOrder);
sqlModel->setEditStrategy(QSqlTableModel::OnFieldChange);
sqlModel->select();
QSqlRecord record(sqlModel->record());
record.setValue(0,50);
record.setValue(3,222);
sqlModel->insertRecord(-1, record);
sqlModel->submitAll();
这应该将 222 添加到第 4 列。但是我的 sqlDatabase 中不会存储任何内容
我的 SqlDataModel::setData 看起来像这样:
bool SqlDataModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
qDebug() << index.column() << " " << index.row() << " " << value << " ---- " << role;
qDebug() << roles[Qt::UserRole + 1];
//qDebug() << QSqlTableModel::setData(modelIndex, value);
qDebug() << QSqlQueryModel::setData(index, value);
return false;
}
输出将是:
0 39 QVariant(int, 50) ---- 2
"id"
false
1 39 QVariant(QString, "") ---- 2
"id"
false
2 39 QVariant(QString, "") ---- 2
"id"
false
3 39 QVariant(int, 222) ---- 2
"id"
false
4 39 QVariant(double, 0) ---- 2
"id"
false
5 39 QVariant(int, 0) ---- 2
"id"
false
6 39 QVariant(double, 0) ---- 2
"id"
false
7 39 QVariant(double, 0) ---- 2
"id"
false
确定我的 setData 方法是错误的,但我不明白那里应该发生什么,我没有找到任何示例。
我是否认为我需要继承 QSqlTableModel 才能将模型通过 QQmlContext 放到 QML 并显示具有像我的列命名一样命名的角色的列?如果不是,我怎么能把第 1 列的内容放到 QMLTableview:
TableViewColumn {
role: "id" // what should be the role if I don't subclass???
title: "ID"
width: 80
}
我很高兴得到任何帮助、评论、示例、其他帖子或任何能让我更进一步的东西......谢谢
【问题讨论】:
-
Here你有一个很好的例子。
-
不幸的是,这个示例以我能找到的最多的方式结束 -> 显示 SQL 数据。但我正在寻找的是“setData-Method”来编辑或附加数据到 SQL 数据库。
-
好吧,看来我没有理解正确的一切。我不需要继承 setData。我刚刚写了这个:
QSqlRecord record = sqlModel->record(); record.setValue("id", 87); //qDebug() << record.fieldName(0) << " _ " << record.value(0); qDebug() << sqlModel->insertRecord(-1, record); qDebug() << sqlModel->submitAll();这有时可以完成工作,但有时 submitAll() 返回 false。我不明白为什么它有时会填满一行,有时却没有......
标签: sql qt qml subclass qsqltablemodel