2013-08-29 1 views
1

모바일 응용 프로그램에서 로그인 기능을 수행하고 있습니다. 로그인 할 때 휴대 전화에 데이터를 저장해야한다는 것을 알고 있습니다.QML blackberry에서 QSettings를 사용하는 방법 10

내 전체 프로그램은 QML로되어 있으며 일부 데이터를 내 휴대 전화에 로컬로 저장하려고합니다. QAMPLE에서 QSettings를 사용하는 방법을 볼 수있는 샘플 코드를 찾을 수 없습니다.

내 문제를 이해할 수없는 경우 알려주십시오.

답변

4

QSettings는 QObject를 상속 받지만 실제로 QML 파일의 선언 부분에 사용하도록 구성되어 있지는 않습니다. Google 검색의 결과를 간단하게 살펴보면 QSettings를 사용하여 인터페이스를 처리하는 사용자 정의 C++ 객체를 만드는 것이 내 생각을 확인하는 경향이 있습니다.

4

내가 찾은 가장 간단한 해결책은 QSettings의 하위 클래스를 만들고 QML에서 호출하려는 메서드에 Q_INVOKABLE을 추가하는 것입니다. 그런 다음이 클래스의 인스턴스를 QML 컨텍스트에 배치합니다.

다음은 코드에서 보이는 방식입니다.

#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에서 :

settings.hpp에서

#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); 
} 

그리고 (내 경우에는 applicationui.cpp) 당신이 당신의 QmlDocument 인스턴스를 만들 이제까지 물론, 당신은 추가합니다 :

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

QML 코드에서 다음과 같이 할 수 있습니다.

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