diff options
author | Mitch Curtis <mitch.curtis@qt.io> | 2018-09-11 10:41:57 +0200 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2018-10-11 13:26:56 +0000 |
commit | 1ce94fc0f5311c8d9d7dc50de239a827279edcd9 (patch) | |
tree | dfa43e5f70a049d2fa1c3617998dacffc4409e5a /src/imports | |
parent | 7ca32bc41c2b5a5f6ea360391ba7e398ad7f961b (diff) |
Qt Labs Settings: warn if failed to initialize internal QSettings instance
First, warn the user that the QSettings instance failed to initialize
if there was an error. Then, if the error was QSettings::AccessError,
print the specific application identifiers that weren't set so they
know what they have to do. For example:
QML Settings: Failed to initialize QSettings instance. Status code is: 1
QML Settings: The following application identifiers have not been set: QVector("organizationName", "organizationDomain")
In my case, the QSettings instance wasn't created on
Windows because organizationName wasn't set.
Change-Id: I7970209e09b78f785730422c45978775311b96ac
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/settings/qqmlsettings.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/imports/settings/qqmlsettings.cpp b/src/imports/settings/qqmlsettings.cpp index 2271774643..54ff64a3a9 100644 --- a/src/imports/settings/qqmlsettings.cpp +++ b/src/imports/settings/qqmlsettings.cpp @@ -39,10 +39,12 @@ #include "qqmlsettings_p.h" #include <qcoreevent.h> +#include <qcoreapplication.h> #include <qloggingcategory.h> #include <qsettings.h> #include <qpointer.h> #include <qjsvalue.h> +#include <qqmlinfo.h> #include <qdebug.h> #include <qhash.h> @@ -269,6 +271,26 @@ QSettings *QQmlSettingsPrivate::instance() const if (!settings) { QQmlSettings *q = const_cast<QQmlSettings*>(q_func()); settings = new QSettings(q); + if (settings->status() != QSettings::NoError) { + // TODO: can't print out the enum due to the following error: + // error: C2666: 'QQmlInfo::operator <<': 15 overloads have similar conversions + qmlWarning(q) << "Failed to initialize QSettings instance. Status code is: " << int(settings->status()); + + if (settings->status() == QSettings::AccessError) { + QVector<QString> missingIdentifiers; + if (QCoreApplication::organizationName().isEmpty()) + missingIdentifiers.append(QLatin1String("organizationName")); + if (QCoreApplication::organizationDomain().isEmpty()) + missingIdentifiers.append(QLatin1String("organizationDomain")); + if (QCoreApplication::applicationName().isEmpty()) + missingIdentifiers.append(QLatin1String("applicationName")); + + if (!missingIdentifiers.isEmpty()) + qmlWarning(q) << "The following application identifiers have not been set: " << missingIdentifiers; + } + return settings; + } + if (!category.isEmpty()) settings->beginGroup(category); if (initialized) |