qt5base-lts/tests/manual/qlocale/languages.cpp
Marc Mutz 11d6932560 Mark all of Qt as free of Q_FOREACH, except where it isn't
The density of Q_FOREACH uses in this and some other modules is still
extremely high, too high for anyone to tackle in a short amount of
time. Even if they're not concentrated in just a few TUs, we need to
make progress on a global QT_NO_FOREACH default, so grab the nettle
and stick to our strategy:

Mark the whole of Qt with QT_NO_FOREACH, to prevent new uses from
creeping in, and whitelist the affected TUs by #undef'ing
QT_NO_FOREACH locally, at the top of each file. For TUs that are part
of a larger executable, this requires these files to be compiled
separately, so add them to NO_PCH_SOURCES (which implies
NO_UNITY_BUILD_SOURCES, too).

In tst_qglobal.cpp and tst_qcollections.cpp change the comment on the
#undef QT_NO_FOREACH to indicate that these actually test the macro.

Task-number: QTBUG-115839
Change-Id: Iecc444eb7d43d7e4d037f6e155abe0e14a00a5d6
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-08-19 05:19:42 +00:00

41 lines
1.1 KiB
C++

// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "languages.h"
#include <QLabel>
#include <QListWidget>
#include <QHBoxLayout>
LanguagesWidget::LanguagesWidget()
{
QVBoxLayout *l = new QVBoxLayout(this);
languagesLabel = new QLabel("Preferred languages:");
languagesList = new QListWidget;
l->addWidget(languagesLabel);
l->addWidget(languagesList);
localeChanged(QLocale());
}
void LanguagesWidget::localeChanged(QLocale locale)
{
languagesList->clear();
foreach (const QString &lang, locale.uiLanguages()) {
QListWidgetItem *item = new QListWidgetItem(lang, languagesList);
QLocale l(lang);
if (l.language() != QLocale::C) {
QString language = QLocale::languageToString(l.language());
QString country = QLocale::territoryToString(l.territory());
QString tooltip = QString(QLatin1String("%1: %2/%3")).arg(l.name(), language, country);
item->setToolTip(tooltip);
}
}
}