245 QQmlSettings *q =
const_cast<QQmlSettings *>(q_func());
246 settings = QQmlFile::isLocalFile(location)
247 ?
new QSettings(QQmlFile::urlToLocalFileOrQrc(location), QSettings::IniFormat, q)
250 if (settings->status() != QSettings::NoError) {
253 qmlWarning(q) <<
"Failed to initialize QSettings instance. Status code is: " <<
int(settings->status());
255 if (settings->status() == QSettings::AccessError) {
256 QStringList missingIdentifiers = {};
257 if (QCoreApplication::organizationName().isEmpty())
258 missingIdentifiers.append(u"organizationName"_s);
259 if (QCoreApplication::organizationDomain().isEmpty())
260 missingIdentifiers.append(u"organizationDomain"_s);
261 if (QCoreApplication::applicationName().isEmpty())
262 missingIdentifiers.append(u"applicationName"_s);
264 if (!missingIdentifiers.isEmpty())
265 qmlWarning(q) <<
"The following application identifiers have not been set: " << missingIdentifiers;
271 if (!category.isEmpty())
272 settings->beginGroup(category);
299 const QMetaObject *mo = q->metaObject();
300 const int offset = QQmlSettings::staticMetaObject.propertyCount();
301 const int count = mo->propertyCount();
303 for (
int i = offset; i < count; ++i) {
304 QMetaProperty property = mo->property(i);
305 const QString propertyName = QString::fromUtf8(property.name());
307 const QVariant previousValue = readProperty(property);
308 const QVariant currentValue = instance()->value(propertyName,
311 if (!currentValue.isNull() && (!previousValue.isValid()
312 || (currentValue.canConvert(previousValue.metaType())
313 && previousValue != currentValue))) {
314 property.write(q, currentValue);
315 qCDebug(lcQmlSettings) <<
"QQmlSettings: load" << property.name() <<
"setting:" << currentValue <<
"default:" << previousValue;
320 if (!instance()->contains(propertyName))
325 static const int propertyChangedIndex = mo->indexOfSlot(
"_q_propertyChanged()");
326 QMetaObject::connect(q, property.notifySignalIndex(), q, propertyChangedIndex);
333 QHash<
const char *, QVariant>::const_iterator it = changedProperties.constBegin();
334 while (it != changedProperties.constEnd()) {
335 instance()->setValue(QString::fromUtf8(it.key()), it.value());
336 qCDebug(lcQmlSettings) <<
"QQmlSettings: store" << it.key() <<
":" << it.value();
339 changedProperties.clear();
345 const QMetaObject *mo = q->metaObject();
346 const int offset = QQmlSettings::staticMetaObject.propertyCount() ;
347 const int count = mo->propertyCount();
348 for (
int i = offset; i < count; ++i) {
349 const QMetaProperty &property = mo->property(i);
350 const QVariant value = readProperty(property);
351 changedProperties.insert(property.name(), value);
352 qCDebug(lcQmlSettings) <<
"QQmlSettings: cache" << property.name() <<
":" << value;
354 timer.start(settingsWriteDelay, q);