如何在QML blackberry 10中使用QSettings

时间:2013-08-29 12:08:34

标签: blackberry qml blackberry-10 blackberry-simulator

我在移动应用程序中执行登录功能。你知道我们登录时必须在手机上保存一些数据。

我的整个程序是QML,我想在手机本地保存一些数据。 我无法找到任何示例代码,通过它我可以看到如何在QML中使用QSettings

如果您无法理解我的问题,请告诉我。

2 个答案:

答案 0 :(得分:4)

即使QSettings继承了QObject,它也不是真正用于QML文件的声明部分的结构。浏览Google搜索结果可以确认我的想法是创建一个处理QSettings界面的自定义C ++对象。

答案 1 :(得分:4)

我发现最简单的解决方案是创建QSettings的子类,将Q_INVOKABLE添加到我想从QML调用的方法中。然后,我将此类的实例放在QML上下文中。

以下是代码的外观。

settings.hpp

#ifndef Settings_HPP
#define Settings_HPP
#include <QSettings>
class Settings: public QSettings
{
    Q_OBJECT
public:
    Settings(QObject *parent = 0);
    Q_INVOKABLE QVariant value(const QString& key, const QVariant& defaultValue = QVariant()) const;
    Q_INVOKABLE void setValue(const QString& key, const QVariant& value);
};
#endif

settings.cpp

#include "settings.hpp"

Settings::Settings(QObject *parent)
    : QSettings(parent)
{
}

QVariant Settings::value(const QString& key, const QVariant& defaultValue) const
{
    return QSettings::value(key, defaultValue);
}

void Settings::setValue(const QString& key, const QVariant& value)
{
    QSettings::setValue(key, value);
}

当然,无论你在哪里创建QmlDocument实例(在我的情况下是applicationui.cpp),你都要添加:

#include "settings.hpp"
...
qml->setContextProperty("settings", new Settings());

从QML代码中,我可以执行以下操作:

ToggleButton {
    checked: settings.value('somekey')
    onCheckedChanged: {
        settings.setValue('somekey', checked);
}