diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | autotests/kconfigtest.cpp | 24 | ||||
-rw-r--r-- | src/core/kauthorized.cpp | 2 | ||||
-rw-r--r-- | src/core/kconfig.cpp | 17 | ||||
-rw-r--r-- | src/core/kconfiggroup.h | 7 | ||||
-rw-r--r-- | src/core/kconfigini.cpp | 2 | ||||
-rw-r--r-- | src/core/kcoreconfigskeleton.cpp | 6 | ||||
-rw-r--r-- | src/core/kdesktopfile.cpp | 14 | ||||
-rw-r--r-- | src/core/ksharedconfig.cpp | 2 | ||||
-rw-r--r-- | src/gui/kconfigloader.cpp | 7 | ||||
-rw-r--r-- | src/kconf_update/kconf_update.cpp | 18 | ||||
-rw-r--r-- | src/kconf_update/kconfigutils.cpp | 2 | ||||
-rw-r--r-- | src/kconfig_compiler/kconfig_compiler.cpp | 11 | ||||
-rw-r--r-- | src/kreadconfig/kreadconfig.cpp | 4 | ||||
-rw-r--r-- | src/kreadconfig/kwriteconfig.cpp | 4 |
15 files changed, 70 insertions, 51 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 21c078fb..b9d1585f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ ecm_setup_version(PROJECT VARIABLE_PREFIX KCONFIG PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5ConfigConfigVersion.cmake" SOVERSION 5) +add_definitions(-DQT_NO_FOREACH) add_subdirectory(src) if (BUILD_TESTING) diff --git a/autotests/kconfigtest.cpp b/autotests/kconfigtest.cpp index 2ad3b312..32d3eef8 100644 --- a/autotests/kconfigtest.cpp +++ b/autotests/kconfigtest.cpp @@ -338,7 +338,8 @@ void KConfigTest::testSimple() QCOMPARE(sc2.name(), QString(TEST_SUBDIR "kconfigtest")); // make sure groupList() isn't returning something it shouldn't - Q_FOREACH (const QString &group, sc2.groupList()) { + const QStringList lstGroup = sc2.groupList(); + for (const QString &group : lstGroup) { QVERIFY(!group.isEmpty() && group != "<default>"); QVERIFY(!group.contains(QChar(0x1d))); } @@ -853,14 +854,16 @@ void KConfigTest::testDelete() QVERIFY(cf.sync()); int count = 0; - Q_FOREACH (const QByteArray &item, readLines()) + const QList<QByteArray> listLines = readLines(); + for (const QByteArray &item : listLines) if (item.startsWith("devices|")) { // krazy:exclude=strings count++; } QCOMPARE(count, 2); cg.deleteEntry("devices|manual|/mnt/ipod"); QVERIFY(cf.sync()); - Q_FOREACH (const QByteArray &item, readLines()) { + const QList<QByteArray> listLines2 = readLines(); + for (const QByteArray &item : listLines2) { QVERIFY(!item.contains("ipod")); } } @@ -898,7 +901,8 @@ void KConfigTest::testDefaultGroup() QCOMPARE(lines.first(), QByteArray("TestKey=defaultGroup\n")); // Now that the group exists make sure it isn't returned from groupList() - Q_FOREACH (const QString &group, sc.groupList()) { + const QStringList groupList = sc.groupList(); + for (const QString &group : groupList) { QVERIFY(!group.isEmpty() && group != "<default>"); } @@ -943,7 +947,8 @@ void KConfigTest::testEmptyGroup() QCOMPARE(lines.first(), QByteArray("TestKey=emptyGroup\n")); // Now that the group exists make sure it isn't returned from groupList() - Q_FOREACH (const QString &group, sc.groupList()) { + const QStringList groupList = sc.groupList(); + for (const QString &group : groupList) { QVERIFY(!group.isEmpty() && group != "<default>"); } emptyGroup.deleteGroup(); @@ -1048,7 +1053,7 @@ void KConfigTest::testMerge() << "entry[fr]=French\n"; QFile file(testConfigDir() + "/mergetest"); file.open(QIODevice::ReadOnly | QIODevice::Text); - Q_FOREACH (const QByteArray &line, lines) { + for (const QByteArray &line : qAsConst(lines)) { QCOMPARE(line, file.readLine()); } } @@ -1111,7 +1116,7 @@ void KConfigTest::testOptionOrder() QFile file(testConfigDir() + "/doubleattrtest"); file.open(QIODevice::ReadOnly | QIODevice::Text); - Q_FOREACH (const QByteArray &line, lines) { + for (const QByteArray &line : qAsConst(lines)) { QCOMPARE(line, file.readLine()); } } @@ -1190,7 +1195,8 @@ void KConfigTest::testSubGroup() QCOMPARE(groups, QStringList() << "NEG Child1" << "NEG Child4"); // make sure groupList() isn't returning something it shouldn't - Q_FOREACH (const QString &group, sc.groupList()) { + const QStringList listGroup = sc.groupList(); + for (const QString &group : listGroup) { QVERIFY(!group.isEmpty() && group != "<default>"); QVERIFY(!group.contains(QChar(0x1d))); QVERIFY(!group.contains("subgroup")); @@ -1866,7 +1872,7 @@ void KConfigTest::testThreads() // QEXPECT_FAIL triggers race conditions, it should be fixed to use QThreadStorage... //futures << QtConcurrent::run(this, &KConfigTest::testDeleteWhenLocalized); //futures << QtConcurrent::run(this, &KConfigTest::testEntryMap); - Q_FOREACH (QFuture<void> f, futures) { // krazy:exclude=foreach + for (QFuture<void> f : qAsConst(futures)) { // krazy:exclude=foreach f.waitForFinished(); } } diff --git a/src/core/kauthorized.cpp b/src/core/kauthorized.cpp index b6054d76..12068dc5 100644 --- a/src/core/kauthorized.cpp +++ b/src/core/kauthorized.cpp @@ -391,7 +391,7 @@ KCONFIGCORE_EXPORT bool authorizeUrlActionInternal(const QString &action, const QUrl destURL(_destURL); destURL.setPath(QDir::cleanPath(destURL.path())); - Q_FOREACH (const URLActionRule &rule, d->urlActionRestrictions) { + for (const URLActionRule &rule : qAsConst(d->urlActionRestrictions)) { if ((result != rule.permission) && // No need to check if it doesn't make a difference (action == QLatin1String(rule.action.constData())) && rule.baseMatch(baseURL, baseClass) && diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp index bdf89b1e..b78196d6 100644 --- a/src/core/kconfig.cpp +++ b/src/core/kconfig.cpp @@ -706,10 +706,10 @@ QStringList KConfigPrivate::getGlobalFiles() const const bool useEtcKderc = !etc_kderc.isEmpty(); s_globalFiles()->reserve(paths1.size() + paths2.size() + (useEtcKderc ? 1 : 0)); - Q_FOREACH (const QString &dir1, paths1) { + for (const QString &dir1 : paths1) { s_globalFiles()->push_front(dir1); } - Q_FOREACH (const QString &dir2, paths2) { + for (const QString &dir2 : paths2) { s_globalFiles()->push_front(dir2); } @@ -729,7 +729,7 @@ void KConfigPrivate::parseGlobalFiles() // TODO: can we cache the values in etc_kderc / other global files // on a per-application basis? const QByteArray utf8Locale = locale.toUtf8(); - Q_FOREACH (const QString &file, globalFiles) { + for (const QString &file : globalFiles) { KConfigBackend::ParseOptions parseOpts = KConfigBackend::ParseGlobal | KConfigBackend::ParseExpansions; if (file.compare(*sGlobalFileName, sPathCaseSensitivity) != 0) @@ -760,7 +760,8 @@ void KConfigPrivate::parseConfigFiles() files << canonicalFile; } } else { - Q_FOREACH (const QString &f, QStandardPaths::locateAll(resourceType, fileName)) { + const QStringList localFilesPath = QStandardPaths::locateAll(resourceType, fileName); + for (const QString &f : localFilesPath) { files.prepend(QFileInfo(f).canonicalFilePath()); } @@ -781,7 +782,7 @@ void KConfigPrivate::parseConfigFiles() // qDebug() << "parsing local files" << files; const QByteArray utf8Locale = locale.toUtf8(); - foreach (const QString &file, files) { + for (const QString &file : qAsConst(files)) { if (file.compare(mBackend->filePath(), sPathCaseSensitivity) == 0) { switch (mBackend->parseConfig(utf8Locale, entryMap, KConfigBackend::ParseExpansions)) { case KConfigBackend::ParseOk: @@ -816,7 +817,7 @@ KConfig::AccessMode KConfig::accessMode() const void KConfig::addConfigSources(const QStringList &files) { Q_D(KConfig); - Q_FOREACH (const QString &file, files) { + for (const QString &file : files) { d->extraFiles.push(file); } @@ -931,9 +932,9 @@ void KConfig::deleteGroupImpl(const QByteArray &aGroup, WriteConfigFlags flags) KEntryMap::EntryOptions options = convertToOptions(flags) | KEntryMap::EntryDeleted; const QSet<QByteArray> groups = d->allSubGroups(aGroup); - Q_FOREACH (const QByteArray &group, groups) { + for (const QByteArray &group : groups) { const QStringList keys = d->keyListImpl(group); - Q_FOREACH (const QString &_key, keys) { + for (const QString &_key : keys) { const QByteArray &key = _key.toUtf8(); if (d->canWriteEntry(group, key.constData())) { d->entryMap.setEntry(group, key, QByteArray(), options); diff --git a/src/core/kconfiggroup.h b/src/core/kconfiggroup.h index f5e16fdb..0cedeaa7 100644 --- a/src/core/kconfiggroup.h +++ b/src/core/kconfiggroup.h @@ -731,12 +731,13 @@ QList<T> KConfigGroup::readEntry(const char *key, const QList<T> &defaultValue) QVariantList data; - Q_FOREACH (const T &value, defaultValue) { + for (const T &value : defaultValue) { data.append(qVariantFromValue(value)); } QList<T> list; - Q_FOREACH (const QVariant &value, readEntry<QVariantList>(key, data)) { + const auto variantList = readEntry<QVariantList>(key, data); + for (const QVariant &value : variantList) { Q_ASSERT(value.canConvert<T>()); list.append(qvariant_cast<T>(value)); } @@ -757,7 +758,7 @@ void KConfigGroup::writeEntry(const char *key, const QList<T> &list, WriteConfig ConversionCheck::to_QVariant<T>(); ConversionCheck::to_QString<T>(); QVariantList data; - Q_FOREACH (const T &value, list) { + for (const T &value : list) { data.append(qVariantFromValue(value)); } diff --git a/src/core/kconfigini.cpp b/src/core/kconfigini.cpp index 87c4a8af..26d8390c 100644 --- a/src/core/kconfigini.cpp +++ b/src/core/kconfigini.cpp @@ -299,7 +299,7 @@ KConfigIniBackend::parseConfig(const QByteArray ¤tLocale, KEntryMap &entry } // now make sure immutable groups are marked immutable - Q_FOREACH (const QByteArray &group, immutableGroups) { + for (const QByteArray &group : qAsConst(immutableGroups)) { entryMap.setEntry(group, QByteArray(), QByteArray(), KEntryMap::EntryImmutable); } diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp index 01f69cbe..50f91e93 100644 --- a/src/core/kcoreconfigskeleton.cpp +++ b/src/core/kcoreconfigskeleton.cpp @@ -902,12 +902,12 @@ void KCoreConfigSkeleton::ItemUrlList::readConfig(KConfig *config) mReference = mDefault; } else { QStringList strList; - Q_FOREACH (const QUrl &url, mDefault) { + for (const QUrl &url : qAsConst(mDefault)) { strList.append(url.toString()); } mReference.clear(); const QStringList readList = cg.readEntry<QStringList>(mKey, strList); - Q_FOREACH (const QString &str, readList) { + for (const QString &str : readList) { mReference.append(QUrl(str)); } } @@ -924,7 +924,7 @@ void KCoreConfigSkeleton::ItemUrlList::writeConfig(KConfig *config) cg.revertToDefault(mKey); } else { QStringList strList; - Q_FOREACH (const QUrl &url, mReference) { + for (const QUrl &url : qAsConst(mReference)) { strList.append(url.toString()); } cg.writeEntry<QStringList>(mKey, strList); diff --git a/src/core/kdesktopfile.cpp b/src/core/kdesktopfile.cpp index 96d7b118..d9283cef 100644 --- a/src/core/kdesktopfile.cpp +++ b/src/core/kdesktopfile.cpp @@ -81,14 +81,16 @@ QString KDesktopFile::locateLocal(const QString &path) QString relativePath; QChar plus(QLatin1Char('/')); // Relative to config? (e.g. for autostart) - Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) { + const QStringList lstGenericConfigLocation = QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation); + for (const QString &dir : lstGenericConfigLocation) { if (path.startsWith(dir + plus)) { relativePath = path.mid(dir.length() + 1); return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + relativePath; } } // Relative to xdg data dir? (much more common) - Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { + const QStringList lstGenericDataLocation = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); + for (const QString &dir : lstGenericDataLocation) { if (path.startsWith(dir + plus)) { relativePath = path.mid(dir.length() + 1); } @@ -128,13 +130,14 @@ bool KDesktopFile::isAuthorizedDesktopFile(const QString &path) // Check if the .desktop file is installed as part of KDE or XDG. const QStringList appsDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation); - Q_FOREACH (const QString &prefix, appsDirs) { + for (const QString &prefix : appsDirs) { if (QDir(prefix).exists() && realPath.startsWith(QFileInfo(prefix).canonicalFilePath(), sensitivity)) { return true; } } const QString servicesDir = QStringLiteral("kservices5/"); // KGlobal::dirs()->xdgDataRelativePath("services") - Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { + const QStringList lstGenericDataLocation = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); + for (const QString &xdgDataPrefix : lstGenericDataLocation) { if (QDir(xdgDataPrefix).exists()) { const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); if (realPath.startsWith(prefix + QLatin1Char('/') + servicesDir, sensitivity)) { @@ -143,7 +146,8 @@ bool KDesktopFile::isAuthorizedDesktopFile(const QString &path) } } const QString autostartDir = QStringLiteral("autostart/"); - Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) { + const QStringList lstConfigPath = QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation); + for (const QString &xdgDataPrefix : lstConfigPath) { if (QDir(xdgDataPrefix).exists()) { const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); if (realPath.startsWith(prefix + QLatin1Char('/') + autostartDir, sensitivity)) { diff --git a/src/core/ksharedconfig.cpp b/src/core/ksharedconfig.cpp index 52a2d23d..0b2b9c35 100644 --- a/src/core/ksharedconfig.cpp +++ b/src/core/ksharedconfig.cpp @@ -90,7 +90,7 @@ KSharedConfigPtr KSharedConfig::openConfig(const QString &_fileName, list->mainConfig = nullptr; } - foreach (auto cfg, *static_cast<const GlobalSharedConfigList*>(list)) { + for (auto cfg : qAsConst(*list)) { if (cfg->name() == fileName && cfg->d_ptr->openFlags == flags && cfg->locationType() == resType diff --git a/src/gui/kconfigloader.cpp b/src/gui/kconfigloader.cpp index e73b161b..bcf21464 100644 --- a/src/gui/kconfigloader.cpp +++ b/src/gui/kconfigloader.cpp @@ -270,9 +270,9 @@ void ConfigLoaderHandler::addItem() } item = doubleItem; } else if (m_type == QStringLiteral("intlist")) { - QStringList tmpList = m_default.split(QLatin1Char(',')); + const QStringList tmpList = m_default.split(QLatin1Char(',')); QList<int> defaultList; - foreach (const QString &tmp, tmpList) { + for (const QString &tmp : tmpList) { defaultList.append(tmp.toInt()); } item = m_config->addItemIntList(m_name, *d->newIntList(), defaultList, m_key); @@ -428,7 +428,8 @@ QStringList KConfigLoader::groupList() const bool KConfigLoader::usrWriteConfig() { if (d->saveDefaults) { - foreach (const auto& item, items()) { + const auto listItems = items(); + for (const auto& item : listItems) { config()->group(item->group()).writeEntry(item->key(), ""); } } diff --git a/src/kconf_update/kconf_update.cpp b/src/kconf_update/kconf_update.cpp index 89a742ec..c389cda2 100644 --- a/src/kconf_update/kconf_update.cpp +++ b/src/kconf_update/kconf_update.cpp @@ -146,7 +146,7 @@ KonfUpdate::KonfUpdate(QCommandLineParser *parser) updateAll = true; } - foreach (const QString& file, updateFiles) { + for (const QString& file : qAsConst(updateFiles)) { updateFile(file); } @@ -211,11 +211,11 @@ QStringList KonfUpdate::findUpdateFiles(bool dirtyOnly) QStringList result; const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kconf_update"), QStandardPaths::LocateDirectory); - Q_FOREACH (const QString &d, dirs) { + for (const QString &d : dirs) { const QDir dir(d); const QStringList fileNames = dir.entryList(QStringList(QStringLiteral("*.upd"))); - Q_FOREACH (const QString &fileName, fileNames) { + for (const QString &fileName : fileNames) { const QString file = dir.filePath(fileName); QFileInfo info(file); @@ -637,12 +637,14 @@ void KonfUpdate::copyOrMoveGroup(const QStringList &srcGroupPath, const QStringL KConfigGroup cg = KConfigUtils::openGroup(m_oldConfig1, srcGroupPath); // Keys - Q_FOREACH (const QString &key, cg.keyList()) { + const QStringList lstKeys = cg.keyList(); + for (const QString &key : lstKeys) { copyOrMoveKey(srcGroupPath, key, dstGroupPath, key); } // Subgroups - Q_FOREACH (const QString &group, cg.groupList()) { + const QStringList lstGroup = cg.groupList(); + for (const QString &group : lstGroup) { const QStringList groupPath(group); copyOrMoveGroup(srcGroupPath + groupPath, dstGroupPath + groupPath); } @@ -737,7 +739,8 @@ void KonfUpdate::copyGroup(const KConfigGroup &cg1, KConfigGroup &cg2) } // Copy subgroups - Q_FOREACH (const QString &group, cg1.groupList()) { + const QStringList lstGroup = cg1.groupList(); + for (const QString &group : lstGroup) { copyGroup(&cg1, group, &cg2, group); } } @@ -935,7 +938,8 @@ void KonfUpdate::gotScript(const QString &_script) KConfigGroup dstCg = KConfigUtils::openGroup(m_newConfig, m_newGroup); copyGroup(srcCg, dstCg); } - Q_FOREACH (const QString &group, scriptOutConfig.groupList()) { + const QStringList lstGroup = scriptOutConfig.groupList(); + for (const QString &group : lstGroup) { copyGroup(&scriptOutConfig, group, m_newConfig, group); } } diff --git a/src/kconf_update/kconfigutils.cpp b/src/kconf_update/kconfigutils.cpp index 0a2741ea..8f0aa90c 100644 --- a/src/kconf_update/kconfigutils.cpp +++ b/src/kconf_update/kconfigutils.cpp @@ -37,7 +37,7 @@ KConfigGroup openGroup(KConfig *config, const QStringList &lst) { KConfigGroup cg = config->group(""); - foreach (const auto &i, lst) { + for (const auto &i : lst) { cg = cg.group(i); } return cg; diff --git a/src/kconfig_compiler/kconfig_compiler.cpp b/src/kconfig_compiler/kconfig_compiler.cpp index f04d0bd5..da75ad94 100644 --- a/src/kconfig_compiler/kconfig_compiler.cpp +++ b/src/kconfig_compiler/kconfig_compiler.cpp @@ -1451,7 +1451,8 @@ QString memberMutatorBody(CfgEntry *e, const CfgConfig &cfg) out << " ))" << (hasBody ? " {" : "") << endl; out << " " << varExpression << " = v;" << endl; - Q_FOREACH (const Signal &signal, e->signalList()) { + const auto listSignal = e->signalList(); + for (const Signal &signal : listSignal) { if (signal.modify) { out << " Q_EMIT " << This << signal.name << "();" << endl; } else { @@ -1532,7 +1533,7 @@ void beginNamespaces(const QString &p_ns, QTextStream &p_out) { if (!p_ns.isEmpty()) { const QStringList nameSpaces = p_ns.split(QStringLiteral("::")); - foreach (const QString &ns, nameSpaces) { + for (const QString &ns : nameSpaces) { p_out << "namespace " << ns << " {" << endl; } p_out << endl; @@ -2075,7 +2076,7 @@ int main(int argc, char **argv) h << " };" << dec << endl << endl; h << " Q_SIGNALS:"; - Q_FOREACH (const Signal &signal, signalList) { + for (const Signal &signal : qAsConst(signalList)) { h << endl; if (!signal.label.isEmpty()) { h << " /**" << endl; @@ -2620,7 +2621,7 @@ int main(int argc, char **argv) cpp << "{" << endl; cpp << " const bool res = " << cfg.inherits << "::usrSave();" << endl; cpp << " if (!res) return false;" << endl << endl; - Q_FOREACH (const Signal &signal, signalList) { + for (const Signal &signal : qAsConst(signalList)) { if (signal.modify) { continue; } @@ -2665,7 +2666,7 @@ int main(int argc, char **argv) if (!signalList.isEmpty()) cpp << endl; - Q_FOREACH (const Signal &signal, signalList) { + for (const Signal &signal : qAsConst(signalList)) { if (signal.modify) { cpp << " if ( flags & " << signalEnumName(signal.name) << " ) {" << endl; cpp << " Q_EMIT " << signal.name << "();" << endl; diff --git a/src/kreadconfig/kreadconfig.cpp b/src/kreadconfig/kreadconfig.cpp index cad7e501..70e40b29 100644 --- a/src/kreadconfig/kreadconfig.cpp +++ b/src/kreadconfig/kreadconfig.cpp @@ -61,7 +61,7 @@ int main(int argc, char **argv) parser.process(app); - QStringList groups=parser.values(QStringLiteral("group")); + const QStringList groups=parser.values(QStringLiteral("group")); QString key=parser.value(QStringLiteral("key")); QString file=parser.value(QStringLiteral("file")); QString dflt=parser.value(QStringLiteral("default")); @@ -83,7 +83,7 @@ int main(int argc, char **argv) configMustDeleted=true; } KConfigGroup cfgGroup = konfig->group(QString()); - foreach (const QString &grp, groups) + for (const QString &grp : groups) cfgGroup = cfgGroup.group(grp); if(type==QStringLiteral("bool")) { dflt=dflt.toLower(); diff --git a/src/kreadconfig/kwriteconfig.cpp b/src/kreadconfig/kwriteconfig.cpp index 2168e8a9..bb2c892f 100644 --- a/src/kreadconfig/kwriteconfig.cpp +++ b/src/kreadconfig/kwriteconfig.cpp @@ -40,7 +40,7 @@ int main(int argc, char **argv) parser.process(app); - QStringList groups=parser.values(QStringLiteral("group")); + const QStringList groups=parser.values(QStringLiteral("group")); QString key=parser.value(QStringLiteral("key")); QString file=parser.value(QStringLiteral("file")); QString type=parser.value(QStringLiteral("type")).toLower(); @@ -58,7 +58,7 @@ int main(int argc, char **argv) konfig = new KConfig( file, KConfig::NoGlobals ); KConfigGroup cfgGroup = konfig->group(QString()); - foreach (const QString &grp, groups) + for (const QString &grp : groups) cfgGroup = cfgGroup.group(grp); if ( konfig->accessMode() != KConfig::ReadWrite || cfgGroup.isEntryImmutable( key ) ) return 2; |