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
}
}
}
}
}
「メッセージ!」が届くはずです。私のリストの出力として、しかし私は得る:
メッセージ !
メッセージ !
助けはありますか?ありがとう!