检查该应用程序是否首次运行

时间:2019-04-01 15:02:47

标签: c++ qt mobile qml qtquick2

我是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 个答案:

答案 0 :(得分:1)

使用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模块中的类型不能保证在将来的版本中保持兼容。

考虑到非保证,Felgo / V-Play的API具有Storage QML类型,该类型也可以在QML中执行检查。 (他们文档中的第一个示例实现了这一点。)