通过setOfflineStoragePath设置LocalStorage位置

时间:2015-12-05 18:54:04

标签: qt sqlite qml qt5 qtquick2

我正在尝试为我的QML应用程序设置LocalStorage位置(sqlite db),但是一旦我重建并运行应用程序,我仍然看不到子文件夹,INI文件和创建的sqlite数据库所需位置(在资源文件夹中的子文件夹中)。以下是主要文件中的内容 感谢任何人可能会在这里搞错我的错误吗?

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QString>
#include <QDebug>
#include <QDir>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    //engine.setOfflineStoragePath("qrc:/");
    auto offlineStoragePath = QUrl::fromLocalFile(engine.offlineStoragePath());
    engine.rootContext()->setContextProperty("offlineStoragePath", offlineStoragePath);

    QString customPath = "qrc:/OffLineStorage";

    QDir dir;
    if(dir.mkpath(QString(customPath))){
        qDebug() << "Default path >> "+engine.offlineStoragePath();
        engine.setOfflineStoragePath(QString(customPath));
        qDebug() << "New path >> "+engine.offlineStoragePath();
    }


    return app.exec();
}

2 个答案:

答案 0 :(得分:0)

通过查看问题中的代码段,一切看起来都很好 无论如何,您应该验证以下行是否实际上按预期返回true

dir.mkpath(QString(customPath)

如果不是,则if语句的主体在任何情况下都不会被执行,因此永远不会调用setOfflineStoragePath
作为提示,使用qrc:/OffLineStorage作为存储路径似乎不是一个好主意。我不确定它会在生产环境中工作一次(要检查,听起来很奇怪,但它可以工作)。

答案 1 :(得分:0)

尝试在engine.setOfflineStoragePath之前使用engine.load

  

使用qrc:/ OffLineStorage作为存储路径似乎没有   是个好主意。我不确定它将在生产中一次使用   环境

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QString>
#include <QDebug>
#include <QDir>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;

    QString customPath = "qrc:/OffLineStorage";  
    QDir dir;
    if(dir.mkpath(QString(customPath))){
        qDebug() << "Default path >> "+engine.offlineStoragePath();
        engine.setOfflineStoragePath(QString(customPath));
        qDebug() << "New path >> "+engine.offlineStoragePath();
    }

    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    engine.clearComponentCache();
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}