Utils: Add a Process::setUtf8Codec helper function

Allows us to get rid of direct includes of <QTextCodec> in a few places.

Change-Id: I9e3ec953c71f78ce31230cd299c6875696445bdc
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
hjk
2024-12-06 17:15:19 +01:00
parent 5fad41873e
commit 3a56be45a2
5 changed files with 20 additions and 18 deletions

View File

@@ -1748,17 +1748,23 @@ void ChannelBuffer::handleRest()
} }
} }
void Process::setCodec(QTextCodec *c) void Process::setCodec(QTextCodec *codec)
{ {
QTC_ASSERT(c, return); QTC_ASSERT(codec, return);
d->m_stdOutCodec = c; d->m_stdOutCodec = codec;
d->m_stdErrCodec = c; d->m_stdErrCodec = codec;
} }
void Process::setStdOutCodec(QTextCodec *c) void Process::setUtf8Codec()
{ {
QTC_ASSERT(c, return); QTextCodec *codec = QTextCodec::codecForName("UTF-8");
d->m_stdOutCodec = c; d->m_stdOutCodec = codec;
d->m_stdErrCodec = codec;
}
void Process::setUtf8StdOutCodec()
{
d->m_stdOutCodec = QTextCodec::codecForName("UTF-8");
} }
void Process::setTimeOutMessageBoxEnabled(bool v) void Process::setTimeOutMessageBoxEnabled(bool v)

View File

@@ -143,8 +143,9 @@ public:
void runBlocking(std::chrono::seconds timeout = std::chrono::seconds(10), void runBlocking(std::chrono::seconds timeout = std::chrono::seconds(10),
EventLoopMode eventLoopMode = EventLoopMode::Off); EventLoopMode eventLoopMode = EventLoopMode::Off);
void setCodec(QTextCodec *c); // for stdOut and stdErr void setCodec(QTextCodec *codec); // for stdOut and stdErr
void setStdOutCodec(QTextCodec *c); // for stdOut, stdErr uses executable.processStdErrCodec() void setUtf8Codec(); // for stdOut and stdErr
void setUtf8StdOutCodec(); // for stdOut, stdErr uses executable.processStdErrCodec()
void setTimeOutMessageBoxEnabled(bool); void setTimeOutMessageBoxEnabled(bool);

View File

@@ -13,8 +13,6 @@
#include <utils/qtcprocess.h> #include <utils/qtcprocess.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QTextDecoder>
using namespace Tasking; using namespace Tasking;
using namespace Utils; using namespace Utils;
@@ -195,7 +193,7 @@ bool AbstractProcessStep::setupProcess(Process &process)
process.setLowPriority(); process.setLowPriority();
if (buildEnvironment().hasKey("VSLANG")) if (buildEnvironment().hasKey("VSLANG"))
process.setStdOutCodec(QTextCodec::codecForName("UTF-8")); process.setUtf8StdOutCodec();
process.setStdOutCallback([this](const QString &s){ process.setStdOutCallback([this](const QString &s){
emit addOutput(s, OutputFormat::Stdout, DontAppendNewline); emit addOutput(s, OutputFormat::Stdout, DontAppendNewline);

View File

@@ -35,7 +35,6 @@
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QRegularExpression> #include <QRegularExpression>
#include <QSettings> #include <QSettings>
#include <QTextCodec>
#include <QVector> #include <QVector>
#include <QVersionNumber> #include <QVersionNumber>
@@ -260,7 +259,7 @@ static QVector<VisualStudioInstallation> detectVisualStudioFromVsWhere(const QSt
{ {
QVector<VisualStudioInstallation> installations; QVector<VisualStudioInstallation> installations;
Process vsWhereProcess; Process vsWhereProcess;
vsWhereProcess.setCodec(QTextCodec::codecForName("UTF-8")); vsWhereProcess.setUtf8Codec();
vsWhereProcess.setCommand({FilePath::fromString(vswhere), vsWhereProcess.setCommand({FilePath::fromString(vswhere),
{"-products", "*", "-prerelease", "-legacy", "-format", "json", "-utf8"}}); {"-products", "*", "-prerelease", "-legacy", "-format", "json", "-utf8"}});
vsWhereProcess.runBlocking(5s); vsWhereProcess.runBlocking(5s);
@@ -2114,7 +2113,7 @@ std::optional<QString> MsvcToolchain::generateEnvironmentSettings(const Utils::E
CommandLine cmd(cmdPath, {"/D", "/E:ON", "/V:ON", "/c", saver.filePath().toUserOutput()}); CommandLine cmd(cmdPath, {"/D", "/E:ON", "/V:ON", "/c", saver.filePath().toUserOutput()});
qCDebug(Log) << "readEnvironmentSetting: " << call << cmd.toUserOutput() qCDebug(Log) << "readEnvironmentSetting: " << call << cmd.toUserOutput()
<< " Env: " << runEnv.toStringList().size(); << " Env: " << runEnv.toStringList().size();
run.setCodec(QTextCodec::codecForName("UTF-8")); run.setUtf8Codec();
run.setCommand(cmd); run.setCommand(cmd);
run.runBlocking(1min); run.runBlocking(1min);

View File

@@ -11,8 +11,6 @@
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/qtcprocess.h> #include <utils/qtcprocess.h>
#include <QtCore5Compat/QTextCodec>
using namespace Utils; using namespace Utils;
namespace Squish { namespace Squish {
@@ -209,7 +207,7 @@ Core::IDocument::OpenResult ObjectsMapDocument::openImpl(QString *error,
Utils::Process objectMapReader; Utils::Process objectMapReader;
objectMapReader.setCommand({exe, {"--scriptMap", "--mode", "read", objectMapReader.setCommand({exe, {"--scriptMap", "--mode", "read",
"--scriptedObjectMapPath", realFileName.toUserOutput()}}); "--scriptedObjectMapPath", realFileName.toUserOutput()}});
objectMapReader.setCodec(QTextCodec::codecForName("UTF-8")); objectMapReader.setUtf8Codec();
objectMapReader.start(); objectMapReader.start();
objectMapReader.waitForFinished(); objectMapReader.waitForFinished();
text = objectMapReader.cleanedStdOut().toUtf8(); text = objectMapReader.cleanedStdOut().toUtf8();