Убедитесь, что приложение запускается в первый раз - PullRequest
1 голос
/ 01 апреля 2019

Я новичок в разработке мобильных приложений qt, и у меня довольно тупой вопрос.Как я могу проверить, запускает ли пользователь приложение впервые (как на Android, так и на iOS)?

РЕДАКТИРОВАТЬ:

Причина, по которой мне нужна эта проверка, заключается в том, что у меня есть вступление SwipeView дляв первый раз и после прочтения один раз он всегда должен открывать главный экран приложения.

Я пробовал способ, предложенный @TrebledJ, и, похоже, он работает нормально, или это глупо делать это в main.cpp?

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QSettings>

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

QGuiApplication app(argc, argv);

QSettings settings;
QVariant firstRun = settings.value("first-run");

QQmlApplicationEngine engine;
QUrl startingScreen(QStringLiteral("qrc:/main.qml"));

if(!firstRun.isValid())
    settings.setValue("first-run", true);
else
    startingScreen.setUrl(QStringLiteral("qrc:/start.qml"));

engine.load(startingScreen);
if (engine.rootObjects().isEmpty())
    return -1;

return app.exec();
}

1 Ответ

1 голос
/ 01 апреля 2019

Используйте QSettings для проверки установленного значения.

QSettings settings;
QVariant val = settings.value("first-time");
if (!val.isValid()) {
    // ... first run
    settings.setValue("first-time", false);  // set a value so that the value is valid on the next run    
} else {
    // ... not first run
}

В QML существует тип Settings QML.

import Qt.labs.settings 1.0

Settings {
    id: settings
    property bool isFirstTime: true
}

Component.onCompleted: {
    if (settings.isFirstTime) {
        // ... first run
        settings.isFirstTime = false;
    } else {
        // ... not first run
    }
}

Однако согласно документации:

Примечание : этот тип доступен благодаря импорту модуля Qt.labs.settings . Типы в модуле Qt.labs не гарантированно остаются совместимыми в будущих версиях.

Учитывая отсутствие гарантии, API Felgo / V-Play имеет тип Storage QML, который также может выполнять проверку в QML. (Первый пример в их документации реализует это.)

...