From 71d2e461670e45033cdd414d180b6766c871986f Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 12 Jun 2025 08:43:10 +0200 Subject: [PATCH] Utils: Add a workaround for deprecated QTextCodec::setCodecForLocale Change-Id: I5252164c46de1c29f1af45b89a186caace36259e Reviewed-by: David Schulz --- src/libs/utils/textcodec.cpp | 21 +++++++++++++++++++++ src/libs/utils/textcodec.h | 14 ++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/libs/utils/textcodec.cpp b/src/libs/utils/textcodec.cpp index 69da7bf8c54..ab3e37cb6ac 100644 --- a/src/libs/utils/textcodec.cpp +++ b/src/libs/utils/textcodec.cpp @@ -9,6 +9,19 @@ namespace Utils { +// TextEncoding + +TextEncoding::TextEncoding(const QByteArray &name) + : m_name(name) +{} + +TextEncoding::TextEncoding(QStringConverter::Encoding encoding) + : m_name(QStringConverter::nameForEncoding(encoding)) +{} + + +// TextCodec + TextCodec::TextCodec() = default; TextCodec::TextCodec(QTextCodec *codec) @@ -106,9 +119,17 @@ TextCodec TextCodec::latin1() return theLatin1Codec; } +static TextEncoding theEncodingForLocale = TextEncoding(QStringEncoder::System); + void TextCodec::setCodecForLocale(const QByteArray &codecName) { QTextCodec::setCodecForLocale(QTextCodec::codecForName(codecName)); + theEncodingForLocale = codecName; +} + +TextEncoding TextCodec::encodingForLocale() +{ + return theEncodingForLocale; } QByteArray TextCodec::fromUnicode(QStringView data) const diff --git a/src/libs/utils/textcodec.h b/src/libs/utils/textcodec.h index 67de0d7108f..cc11712a161 100644 --- a/src/libs/utils/textcodec.h +++ b/src/libs/utils/textcodec.h @@ -14,6 +14,19 @@ QT_END_NAMESPACE namespace Utils { +class QTCREATOR_UTILS_EXPORT TextEncoding +{ +public: + TextEncoding(const QByteArray &name); + TextEncoding(QStringEncoder::Encoding encoding); + + operator QByteArray() const { return m_name; } + QByteArray name() const { return m_name; } + +private: + QByteArray m_name; +}; + class QTCREATOR_UTILS_EXPORT TextCodec final { public: @@ -52,6 +65,7 @@ public: static TextCodec latin1(); static void setCodecForLocale(const QByteArray &codecName); + static TextEncoding encodingForLocale(); private: explicit TextCodec(QTextCodec *codec);