Jay 덕분에 문제는 QML이 아닌 데이터베이스에만있는 것으로 보입니다. QML 뷰의 QSqlQueryModel이 항목을 두 번 표시합니다.
그래서 최소한의 오류 코드는 다음과 같습니다 my.db.sqlite을 검사 할 때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();
, 내가 얻을 :
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
}
}
}
}
}
내가 가야 "메시지를!" 내 목록에 출력으로,하지만 얻을 :
메시지!
메시지!
어떤 도움? 감사!
나는 그렇게 생각하지 않는다. 텍스트를 변경하고 다시 컴파일하면 두 줄에서 텍스트가 바뀌지 만 추가되거나 제거 된 것이 없다. –
sqlite.exe를 사용하여 데이터베이스의 내용을 확인 했습니까? – Jay
예, 말씀하신대로 여러 번 문장을 올렸습니다. 하지만 난 그냥 손으로 데이터베이스 파일을 삭제하고 다시 한번 내 프로그램을 실행하려고, 그리고 데이터는 여전히 db에 두 번 만들어집니다 ... 왜? (btw 나는 이미 프로그램의 시작 부분에 QFile :: remove ("my.db.sqlite");) 코드를 가지고 있습니다. –