From 4ee1b5674365506eb0f49bdb1d21896c11fccfc7 Mon Sep 17 00:00:00 2001 From: Dmitriy Yatmanov Date: Wed, 25 Apr 2018 14:25:16 +0300 Subject: Add possibility to read INI file Add fileName property so we can choose specific settings file. Task-number: QTBUG-59507 Change-Id: Iedd59eb703a8d00e7f0a6824dde929de5924b451 Reviewed-by: J-P Nurmi --- src/imports/settings/plugin.cpp | 1 + src/imports/settings/plugins.qmltypes | 11 ++++++++--- src/imports/settings/qqmlsettings.cpp | 34 ++++++++++++++++++++++++++++++++-- src/imports/settings/qqmlsettings_p.h | 4 ++++ src/imports/settings/settings.pro | 2 +- 5 files changed, 46 insertions(+), 6 deletions(-) (limited to 'src/imports/settings') diff --git a/src/imports/settings/plugin.cpp b/src/imports/settings/plugin.cpp index dc193d1a10..3ac0ad4653 100644 --- a/src/imports/settings/plugin.cpp +++ b/src/imports/settings/plugin.cpp @@ -55,6 +55,7 @@ public: { Q_ASSERT(QByteArray(uri) == QByteArray("Qt.labs.settings")); qmlRegisterType(uri, 1, 0, "Settings"); + qmlRegisterType(uri, 1, 1, "Settings"); } }; diff --git a/src/imports/settings/plugins.qmltypes b/src/imports/settings/plugins.qmltypes index 40d8746525..ae3de3dfff 100644 --- a/src/imports/settings/plugins.qmltypes +++ b/src/imports/settings/plugins.qmltypes @@ -4,15 +4,20 @@ import QtQuick.tooling 1.2 // It is used for QML tooling purposes only. // // This file was auto-generated by: -// 'qmlplugindump -nonrelocatable -noforceqtquick Qt.labs.settings 1.0' +// 'qmlplugindump -nonrelocatable -noforceqtquick Qt.labs.settings 1.1' Module { dependencies: [] Component { name: "QQmlSettings" prototype: "QObject" - exports: ["Qt.labs.settings/Settings 1.0"] - exportMetaObjectRevisions: [0] + exports: [ + "Qt.labs.settings/Settings 1.0", + "Qt.labs.settings/Settings 1.1" + ] + exportMetaObjectRevisions: [0, 1] Property { name: "category"; type: "string" } + Property { name: "fileName"; revision: 1; type: "string" } } } + diff --git a/src/imports/settings/qqmlsettings.cpp b/src/imports/settings/qqmlsettings.cpp index 2271774643..12d057e503 100644 --- a/src/imports/settings/qqmlsettings.cpp +++ b/src/imports/settings/qqmlsettings.cpp @@ -156,7 +156,8 @@ QT_BEGIN_NAMESPACE Application specific settings are identified by providing application \l {QCoreApplication::applicationName}{name}, \l {QCoreApplication::organizationName}{organization} and - \l {QCoreApplication::organizationDomain}{domain}. + \l {QCoreApplication::organizationDomain}{domain}, or by specifying + \l fileName. \code #include @@ -258,6 +259,7 @@ public: int timerId = 0; bool initialized = false; QString category; + QString fileName; mutable QPointer settings; QHash changedProperties; }; @@ -268,7 +270,7 @@ QSettings *QQmlSettingsPrivate::instance() const { if (!settings) { QQmlSettings *q = const_cast(q_func()); - settings = new QSettings(q); + settings = fileName.isEmpty() ? new QSettings(q) : new QSettings(fileName, QSettings::IniFormat, q); if (!category.isEmpty()) settings->beginGroup(category); if (initialized) @@ -299,6 +301,7 @@ void QQmlSettingsPrivate::load() const QMetaObject *mo = q->metaObject(); const int offset = mo->propertyOffset(); const int count = mo->propertyCount(); + for (int i = offset; i < count; ++i) { QMetaProperty property = mo->property(i); @@ -398,6 +401,33 @@ void QQmlSettings::setCategory(const QString &category) } } +/*! + \qmlproperty string Settings::fileName + + This property holds the path to the settings file. If the file doesn't + already exist, it is created. + + \sa QSettings::fileName, QSettings::IniFormat + + \since Qt.labs.settings 1.1 +*/ +QString QQmlSettings::fileName() const +{ + Q_D(const QQmlSettings); + return d->fileName; +} + +void QQmlSettings::setFileName(const QString &fileName) +{ + Q_D(QQmlSettings); + if (d->fileName != fileName) { + d->reset(); + d->fileName = fileName; + if (d->initialized) + d->load(); + } +} + void QQmlSettings::classBegin() { } diff --git a/src/imports/settings/qqmlsettings_p.h b/src/imports/settings/qqmlsettings_p.h index ce942d7564..1f8721c1a0 100644 --- a/src/imports/settings/qqmlsettings_p.h +++ b/src/imports/settings/qqmlsettings_p.h @@ -65,6 +65,7 @@ class QQmlSettings : public QObject, public QQmlParserStatus Q_OBJECT Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(QString category READ category WRITE setCategory FINAL) + Q_PROPERTY(QString fileName READ fileName WRITE setFileName FINAL REVISION 1) public: explicit QQmlSettings(QObject *parent = 0); @@ -73,6 +74,9 @@ public: QString category() const; void setCategory(const QString &category); + QString fileName() const; + void setFileName(const QString &fileName); + protected: void timerEvent(QTimerEvent *event) override; diff --git a/src/imports/settings/settings.pro b/src/imports/settings/settings.pro index 29229f59cb..816a6a9fef 100644 --- a/src/imports/settings/settings.pro +++ b/src/imports/settings/settings.pro @@ -1,7 +1,7 @@ CXX_MODULE = qml TARGET = qmlsettingsplugin TARGETPATH = Qt/labs/settings -IMPORT_VERSION = 1.0 +IMPORT_VERSION = 1.1 QT = core qml -- cgit v1.2.3