241 QQmlSettingsLabs *q =
const_cast<QQmlSettingsLabs*>(q_func());
242 settings = fileName.isEmpty() ?
new QSettings(q) :
new QSettings(fileName, QSettings::IniFormat, q);
243 if (settings->status() != QSettings::NoError) {
246 qmlWarning(q) <<
"Failed to initialize QSettings instance. Status code is: " <<
int(settings->status());
248 if (settings->status() == QSettings::AccessError) {
249 QVector<QString> missingIdentifiers;
250 if (QCoreApplication::organizationName().isEmpty())
251 missingIdentifiers.append(QLatin1String(
"organizationName"));
252 if (QCoreApplication::organizationDomain().isEmpty())
253 missingIdentifiers.append(QLatin1String(
"organizationDomain"));
254 if (QCoreApplication::applicationName().isEmpty())
255 missingIdentifiers.append(QLatin1String(
"applicationName"));
257 if (!missingIdentifiers.isEmpty())
258 qmlWarning(q) <<
"The following application identifiers have not been set: " << missingIdentifiers;
263 if (!category.isEmpty())
264 settings->beginGroup(category);
289 Q_Q(QQmlSettingsLabs);
290 const QMetaObject *mo = q->metaObject();
291 const int offset = mo->propertyOffset();
292 const int count = mo->propertyCount();
298 for (
int i = offset; i < count; ++i) {
299 QMetaProperty property = mo->property(i);
300 const QString propertyName = QString::fromUtf8(property.name());
302 const QVariant previousValue = readProperty(property);
303 const QVariant currentValue = instance()->value(propertyName,
306 if (!currentValue.isNull() && (!previousValue.isValid()
307 || (currentValue.canConvert(previousValue.metaType())
308 && previousValue != currentValue))) {
309 property.write(q, currentValue);
310 qCDebug(lcSettings) <<
"QQmlSettingsLabs: load" << property.name() <<
"setting:" << currentValue <<
"default:" << previousValue;
315 if (!instance()->contains(propertyName))
320 static const int propertyChangedIndex = mo->indexOfSlot(
"_q_propertyChanged()");
321 QMetaObject::connect(q, property.notifySignalIndex(), q, propertyChangedIndex);
339 Q_Q(QQmlSettingsLabs);
340 const QMetaObject *mo = q->metaObject();
341 const int offset = mo->propertyOffset();
342 const int count = mo->propertyCount();
343 for (
int i = offset; i < count; ++i) {
344 const QMetaProperty &property = mo->property(i);
345 const QVariant value = readProperty(property);
346 changedProperties.insert(property.name(), value);
347 qCDebug(lcSettings) <<
"QQmlSettingsLabs: cache" << property.name() <<
":" << value;
350 q->killTimer(timerId);
351 timerId = q->startTimer(settingsWriteDelay);