感谢 Jay,问题似乎不在于 QML,而仅在于数据库。
所以一个最小的错误代码是:
QFile::remove("my.db.sqlite");
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("my.db.sqlite");
db.open();
QSqlQuery drop("drop table List;");
QSqlQuery create("create table List (sample_text char(200));");
QSqlQuery insert("insert into List values (\"some message!\");");
drop.exec();
create.exec();
insert.exec();
db.close();
检查 my.db.sqlite 时,我得到:
sqlite> select * from list;
some message!
some message!
谢谢!
------ 老问题------
我正在学习 QtSql 和 QML,所以有一些错误的空间。几乎我的整个问题都在我的问题的标题中。我试图制作一个简短的、独立的代码来重现它:
C++ 代码:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
// uncomment after first launch, deleted test to make code short
// QFile::remove("my.db.sqlite");
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("my.db.sqlite");
db.open();
QSqlQuery create("create table List (sample_text char(200))");
QSqlQuery create2("insert into List values (\"message !\")");
create.exec();
create2.exec();
QSqlQueryModel *someSqlModel = new QSqlQueryModel();
someSqlModel->setQuery("SELECT * FROM List");
QQmlContext *context = viewer.rootContext();
context->setContextProperty("datamodel", someSqlModel);
viewer.setMainQmlFile(QStringLiteral("qml/test/main.qml"));
viewer.showExpanded();
return app.exec();
}
QML 代码:
Rectangle {
ListView {
width: 200; height: 200
model: datamodel
delegate: Row {
Rectangle {
width: 100; height: 40
Text {
anchors.fill: parent
text: display
}
}
}
}
}
我应该得到“消息!” 作为我列表中的输出,但我得到:
信息 !
信息 !
有什么帮助吗?谢谢!