1

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

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

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

4

2 回答 2

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);
}             
于 2014-05-07T17:12:24.783 回答
4

尽管 QSettings 继承了 QObject,但它并没有真正结构化以用于 QML 文件的声明部分。浏览一下 Google 搜索的结果往往会证实我的想法,即创建一个自定义 C++ 对象来处理与 QSettings 的接口。

于 2013-08-29T12:27:15.047 回答