aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quickcontrols/chattutorial/chapter4/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/quickcontrols/chattutorial/chapter4/main.cpp')
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/main.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/examples/quickcontrols/chattutorial/chapter4/main.cpp b/examples/quickcontrols/chattutorial/chapter4/main.cpp
new file mode 100644
index 0000000000..0ca281c7d9
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/main.cpp
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtCore>
+#include <QGuiApplication>
+#include <QSqlDatabase>
+#include <QSqlError>
+#include <QtQml>
+
+#include "sqlcontactmodel.h"
+#include "sqlconversationmodel.h"
+
+static void connectToDatabase()
+{
+ QSqlDatabase database = QSqlDatabase::database();
+ if (!database.isValid()) {
+ database = QSqlDatabase::addDatabase("QSQLITE");
+ if (!database.isValid())
+ qFatal("Cannot add database: %s", qPrintable(database.lastError().text()));
+ }
+
+ const QDir writeDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
+ if (!writeDir.mkpath("."))
+ qFatal("Failed to create writable directory at %s", qPrintable(writeDir.absolutePath()));
+
+ // Ensure that we have a writable location on all devices.
+ const QString fileName = writeDir.absolutePath() + "/chat-database.sqlite3";
+ // When using the SQLite driver, open() will create the SQLite database if it doesn't exist.
+ database.setDatabaseName(fileName);
+ if (!database.open()) {
+ qFatal("Cannot open database: %s", qPrintable(database.lastError().text()));
+ QFile::remove(fileName);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ qmlRegisterType<SqlContactModel>("io.qt.examples.chattutorial", 1, 0, "SqlContactModel");
+ qmlRegisterType<SqlConversationModel>("io.qt.examples.chattutorial", 1, 0, "SqlConversationModel");
+
+ connectToDatabase();
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/chapter4/main.qml")));
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
+