×
Namespaces

Variants
Actions
(Difference between revisions)

Using QSettings in QML with also json and XML support

From Nokia Developer Wiki
Jump to: navigation, search
croozeus (Talk | contribs)
m (Croozeus - - Usage: Added appropriate code highlights)
hamishwillee (Talk | contribs)
m (Text replace - "<code cpp>" to "<code cpp-qt>")
 
Line 32: Line 32:
  
 
Start copying {{Icode|setting.cpp}} and {{Icode|setting.h}} into your project source directory. In the {{Icode|main.cpp}} file include the .h:
 
Start copying {{Icode|setting.cpp}} and {{Icode|setting.h}} into your project source directory. In the {{Icode|main.cpp}} file include the .h:
<code cpp>
+
<code cpp-qt>
 
#include "setting.h"
 
#include "setting.h"
 
</code>
 
</code>
 
the register the context property
 
the register the context property
<code cpp>
+
<code cpp-qt>
 
Settings settings(appName, fileName);
 
Settings settings(appName, fileName);
 
viewer.rootContext()->setContextProperty("settings", &settings);
 
viewer.rootContext()->setContextProperty("settings", &settings);
 
</code>
 
</code>
 
fileName will be create as follow:
 
fileName will be create as follow:
<code cpp>
+
<code cpp-qt>
 
QDesktopServices::storageLocation( QDesktopServices::DataLocation ) + "/" + appName + "/" + fileName;
 
QDesktopServices::storageLocation( QDesktopServices::DataLocation ) + "/" + appName + "/" + fileName;
 
</code>
 
</code>

Latest revision as of 04:18, 11 October 2012

This article explains how to use settings in QML

Article Metadata
Tested with
SDK: Nokia Qt SDK 1.2.1
Devices(s): all
Compatibility
Platform(s): all
Device(s): all
Article
Keywords: QSettings
Created: lildeimos (09 May 2012)
Last edited: hamishwillee (11 Oct 2012)

Contents

[edit] Introduction

This class is used as a context property in QML applications as an easy way to store and get user settings. It supports storing arrays. These can also retrieved in json or xml format.

[edit] Usage

Start copying setting.cpp and setting.h into your project source directory. In the main.cpp file include the .h:

#include "setting.h"

the register the context property

Settings settings(appName, fileName);
viewer.rootContext()->setContextProperty("settings", &settings);

fileName will be create as follow:

QDesktopServices::storageLocation( QDesktopServices::DataLocation ) + "/" + appName + "/" + fileName;

In your QML sources you will now be able to use the property settings in ini format as explained below.

[edit] single settings

The ini format is mostly like as:

[main]
user=Marco
location=Italy
...

so to write a new value or overwrite the existing just put in your qml this

settings.setValue("main/user", "Marco");

to get a value:

var user;
user = settings.getValue("main/user");

if you want to have a default value if there is not yet a setting named "main/user", do:

var user;
user = settings.getValue("main/user", "Marco");

if "main/user" exist it will return that value, else will return "Marco".


[edit] array settings

The ini format for arrays is mostly like as:

[main]
user/size=2
user/1/name=Marco
user/1/location=Italy
user/2/name=Marco2
user/2/location=Italy2
...

[edit] appendToArray

to make this in your qml just use:

settings.appendToArray( "main/user", { "name": "Marco" , "location": "Italy" });
settings.appendToArray( "main/user", { "name": "Marco2" , "location": "Italy2" });

[edit] removeArray

to remove the whole array:

settings.removeArray( "main/user");

[edit] removeArrayEntry

to remove a single entry of the array:

settings.removeArrayEntry( "main/user", 1);

[edit] getIndexOfValueInArray

this will get the first array index of "Marco2" inside the array "main/user" checking it in the "name" field.

var i = settings.getIndexOfValueInArray("main/user", "name", "Marco2");

so if it is needed to remove "Marco2" from the array, just do:

settings.removeArrayEntry( "main/user", settings.getIndexOfValueInArray("main/user", "name", "Marco2") );


[edit] checkValueArray

this will return true or false whenever "Marco" is in the array "main/user"

var b = settings.checkValueArray("main/user", "name", "Marco");

[edit] getArrayJson

this function will retrieve the array in a json string format. It is possible to use the eval() function for example to fill a ListModel:

var users = eval ( settings.getArrayJson("main/users") );
listModel.clear();
for (var i=0; i<users.length; i++)
{
listModel.append( {
"name": users[i].name,
"location": users[i].location
} );
}

[edit] getArray

this function is like getArrayJson but it returns the values in a QList< QVariantMap > ready to be use without the need to use eval() function.

[edit] getArrayXml

this function is useful to fill a XmlListModel. The returned xml format is like:

<xml>
<item>
<name>Marco</name>
<location>Italy</location>
</item>
 
<item>
<name>Marco2</name>
<location>Italy2</location>
</item>
...
</xml>

so, for example:

XmlListModel {
id: xmlListModel
xml: getArrayXml("main/users")
query: "/xml/item"
 
XmlRole { name: "name"; query: "name/string()" }
XmlRole { name: "location"; query: "location/string()" }
}

will fill xmlListModel with the stored array.

[edit] Download

File:Settings-v1.0.zip

This page was last modified on 11 October 2012, at 04:18.
171 page views in the last 30 days.
×