From 8527cbedccefd15ed275746650c6cd1cb24be62d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 2 Nov 2020 11:19:12 +0100 Subject: [PATCH] Fix more compilation issues with Qt6 Various Windows related issues and issues with additional QML designer components. Don't use very generic template definitions if the type has to provide not so generic base functionality (in this case providing a stream operator for QDataStream). Task-number: QTCREATORBUG-24098 Change-Id: Id0729c249d1b81e4e939fdaeb2e02b8a64e7e8f9 Reviewed-by: Cristian Adam --- .../floatingdockcontainer.cpp | 4 ++ .../floatingdockcontainer.h | 4 ++ src/libs/utils/consoleprocess.cpp | 16 ++++--- src/libs/utils/qtcprocess.cpp | 4 +- src/plugins/cpptools/symbolfinder.h | 1 + src/plugins/debugger/procinterrupt.cpp | 10 +++-- .../desktopprocesssignaloperation.cpp | 11 ++--- .../itemlibrary/itemlibraryassetimporter.cpp | 12 ++--- .../components/timelineeditor/easingcurve.cpp | 25 +++++++++++ .../components/timelineeditor/timelineutils.h | 44 ------------------- src/tools/qml2puppet/CMakeLists.txt | 2 +- src/tools/qtcdebugger/main.cpp | 6 +++ 12 files changed, 70 insertions(+), 69 deletions(-) diff --git a/src/libs/advanceddockingsystem/floatingdockcontainer.cpp b/src/libs/advanceddockingsystem/floatingdockcontainer.cpp index 787c58e832a..d0b8766c7b2 100644 --- a/src/libs/advanceddockingsystem/floatingdockcontainer.cpp +++ b/src/libs/advanceddockingsystem/floatingdockcontainer.cpp @@ -620,7 +620,11 @@ static const char* windowsMessageString(int messageId) } #ifdef Q_OS_WIN +# if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) bool FloatingDockContainer::nativeEvent(const QByteArray &eventType, void *message, long *result) +# else +bool FloatingDockContainer::nativeEvent(const QByteArray &eventType, void *message, qintptr *result) +# endif { QWidget::nativeEvent(eventType, message, result); MSG *msg = static_cast(message); diff --git a/src/libs/advanceddockingsystem/floatingdockcontainer.h b/src/libs/advanceddockingsystem/floatingdockcontainer.h index 5e45e335a4b..5da2f8ed131 100644 --- a/src/libs/advanceddockingsystem/floatingdockcontainer.h +++ b/src/libs/advanceddockingsystem/floatingdockcontainer.h @@ -196,7 +196,11 @@ protected: // reimplements QWidget /** * Native event filter for handling WM_MOVING messages on Windows */ +# if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) bool nativeEvent(const QByteArray &eventType, void *message, long *result) override; +# else + bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result) override; +#endif #endif public: diff --git a/src/libs/utils/consoleprocess.cpp b/src/libs/utils/consoleprocess.cpp index 25e30214e18..490853659fa 100644 --- a/src/libs/utils/consoleprocess.cpp +++ b/src/libs/utils/consoleprocess.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -416,10 +417,8 @@ bool ConsoleProcess::start() d->m_tempFile = nullptr; return false; } - QTextStream out(d->m_tempFile); - out.setCodec("UTF-16LE"); - out.setGenerateByteOrderMark(false); - + QString outString; + QTextStream out(&outString); // Add PATH and SystemRoot environment variables in case they are missing const QStringList fixedEnvironment = [env] { QStringList envStrings = env; @@ -441,15 +440,18 @@ bool ConsoleProcess::start() for (const QString &var : fixedEnvironment) out << var << QChar(0); out << QChar(0); - out.flush(); - if (out.status() != QTextStream::Ok) { + const QTextCodec *textCodec = QTextCodec::codecForName("UTF-16LE"); + QTC_CHECK(textCodec); + const QByteArray outBytes = textCodec ? textCodec->fromUnicode(outString) : QByteArray(); + if (!textCodec || d->m_tempFile->write(outBytes) < 0) { stubServerShutdown(); emitError(QProcess::FailedToStart, msgCannotWriteTempFile()); delete d->m_tempFile; d->m_tempFile = nullptr; return false; } - } + d->m_tempFile->flush(); +} STARTUPINFO si; ZeroMemory(&si, sizeof(si)); diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index a65c61d53e6..331a882a32f 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -786,7 +786,7 @@ void QtcProcess::terminate() { #ifdef Q_OS_WIN if (m_useCtrlCStub) - EnumWindows(sendShutDownMessageToAllWindowsOfProcess_enumWnd, pid()->dwProcessId); + EnumWindows(sendShutDownMessageToAllWindowsOfProcess_enumWnd, processId()); else #endif QProcess::terminate(); @@ -796,7 +796,7 @@ void QtcProcess::interrupt() { #ifdef Q_OS_WIN QTC_ASSERT(m_useCtrlCStub, return); - EnumWindows(sendInterruptMessageToAllWindowsOfProcess_enumWnd, pid()->dwProcessId); + EnumWindows(sendInterruptMessageToAllWindowsOfProcess_enumWnd, processId()); #endif } diff --git a/src/plugins/cpptools/symbolfinder.h b/src/plugins/cpptools/symbolfinder.h index 6f931388883..dbd126d115d 100644 --- a/src/plugins/cpptools/symbolfinder.h +++ b/src/plugins/cpptools/symbolfinder.h @@ -30,6 +30,7 @@ #include "cppfileiterationorder.h" #include +#include #include #include diff --git a/src/plugins/debugger/procinterrupt.cpp b/src/plugins/debugger/procinterrupt.cpp index b9605e653a5..c7ce711d56a 100644 --- a/src/plugins/debugger/procinterrupt.cpp +++ b/src/plugins/debugger/procinterrupt.cpp @@ -145,10 +145,12 @@ GDB 32bit | Api | Api | NA | Win32 ? QCoreApplication::applicationDirPath() + "/win32interrupt.exe" : QCoreApplication::applicationDirPath() + "/win64interrupt.exe"; if (!QFile::exists(executable)) { - *errorMessage = QString::fromLatin1("%1 does not exist. If you have built %2 " - "on your own, checkout " - "https://code.qt.io/cgit/qt-creator/binary-artifacts.git/."). - arg(QDir::toNativeSeparators(executable), Core::Constants::IDE_DISPLAY_NAME); + *errorMessage = QString::fromLatin1( + "%1 does not exist. If you have built %2 " + "on your own, checkout " + "https://code.qt.io/cgit/qt-creator/binary-artifacts.git/.") + .arg(QDir::toNativeSeparators(executable), + QString(Core::Constants::IDE_DISPLAY_NAME)); break; } switch (QProcess::execute(executable, QStringList(QString::number(pID)))) { diff --git a/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp b/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp index b53d8dbeb70..333a264bbe5 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp @@ -181,11 +181,12 @@ GDB 32bit | Api | Api | N/A | Win32 ? QLatin1String("/win32interrupt.exe") : QLatin1String("/win64interrupt.exe"); if (!QFile::exists(executable)) { - appendMsgCannotInterrupt(pid, tr( "%1 does not exist. If you built %2 " - "yourself, check out https://code.qt.io/cgit/" - "qt-creator/binary-artifacts.git/."). - arg(QDir::toNativeSeparators(executable), - Core::Constants::IDE_DISPLAY_NAME)); + appendMsgCannotInterrupt(pid, + tr("%1 does not exist. If you built %2 " + "yourself, check out https://code.qt.io/cgit/" + "qt-creator/binary-artifacts.git/.") + .arg(QDir::toNativeSeparators(executable), + QString(Core::Constants::IDE_DISPLAY_NAME))); } switch (QProcess::execute(executable, QStringList(QString::number(pid)))) { case -2: diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp index cfb946a95df..322040c82c3 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp @@ -265,11 +265,11 @@ void ItemLibraryAssetImporter::parseQuick3DAsset(const QString &file, const QVar if (!currentChar.isLetter() && !currentChar.isDigit()) currentChar = QLatin1Char('_'); } - QCharRef firstChar = assetName[0]; + const QChar firstChar = assetName[0]; if (firstChar.isDigit()) - firstChar = QLatin1Char('_'); + assetName[0] = QLatin1Char('_'); if (firstChar.isLower()) - firstChar = firstChar.toUpper(); + assetName[0] = firstChar.toUpper(); } QString targetDirPath = targetDir.filePath(assetName); @@ -378,9 +378,9 @@ void ItemLibraryAssetImporter::parseQuick3DAsset(const QString &file, const QVar QFile file(outDir.path() + '/' + fi.baseName() + ".hints"); file.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream out(&file); - out << "visibleInNavigator: true" << endl; - out << "canBeDroppedInFormEditor: false" << endl; - out << "canBeDroppedInView3D: true" << endl; + out << "visibleInNavigator: true" << Qt::endl; + out << "canBeDroppedInFormEditor: false" << Qt::endl; + out << "canBeDroppedInView3D: true" << Qt::endl; file.close(); } QString outIconSource = QString::fromUtf8(content); diff --git a/src/plugins/qmldesigner/components/timelineeditor/easingcurve.cpp b/src/plugins/qmldesigner/components/timelineeditor/easingcurve.cpp index 8dbd32e2681..3a753b3d23e 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/easingcurve.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/easingcurve.cpp @@ -435,6 +435,31 @@ QDebug &operator<<(QDebug &stream, const EasingCurve &curve) return stream; } +QDataStream &operator<<(QDataStream &stream, const std::vector &vec) +{ + stream << static_cast(vec.size()); + for (const auto &elem : vec) + stream << elem; + + return stream; +} + +QDataStream &operator>>(QDataStream &stream, std::vector &vec) +{ + quint64 s; + stream >> s; + + vec.clear(); + vec.reserve(s); + + int val; + for (quint64 i = 0; i < s; ++i) { + stream >> val; + vec.push_back(val); + } + return stream; +} + QDataStream &operator<<(QDataStream &stream, const EasingCurve &curve) { // Ignore the active flag. diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineutils.h b/src/plugins/qmldesigner/components/timelineeditor/timelineutils.h index 0758733769c..ec0f4cec5b6 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineutils.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineutils.h @@ -81,48 +81,4 @@ public: } // End namespace TimelineUtils. -template -inline std::istream &operator>>(std::istream &stream, std::vector &vec) -{ - quint64 s; - stream >> s; - - vec.clear(); - vec.reserve(s); - - T val; - for (quint64 i = 0; i < s; ++i) { - stream >> val; - vec.push_back(val); - } - return stream; -} - -template -inline QDataStream &operator<<(QDataStream &stream, const std::vector &vec) -{ - stream << static_cast(vec.size()); - for (const auto &elem : vec) - stream << elem; - - return stream; -} - -template -inline QDataStream &operator>>(QDataStream &stream, std::vector &vec) -{ - quint64 s; - stream >> s; - - vec.clear(); - vec.reserve(s); - - T val; - for (quint64 i = 0; i < s; ++i) { - stream >> val; - vec.push_back(val); - } - return stream; -} - } // namespace QmlDesigner diff --git a/src/tools/qml2puppet/CMakeLists.txt b/src/tools/qml2puppet/CMakeLists.txt index 1dbdd5b7fa3..fde52312769 100644 --- a/src/tools/qml2puppet/CMakeLists.txt +++ b/src/tools/qml2puppet/CMakeLists.txt @@ -121,7 +121,7 @@ extend_qtc_executable(qml2puppet find_package(Qt5 5.15.0 COMPONENTS Quick3D QUIET) extend_qtc_executable(qml2puppet CONDITION TARGET Qt5::Quick3D - FEATURE_INFO "Qt Quick 3D" + FEATURE_INFO "Qt Quick 3D support" DEPENDS Qt5::Quick3D Qt5::Quick3DPrivate DEFINES QUICK3D_MODULE diff --git a/src/tools/qtcdebugger/main.cpp b/src/tools/qtcdebugger/main.cpp index aa14dfe324c..eb008868d79 100644 --- a/src/tools/qtcdebugger/main.cpp +++ b/src/tools/qtcdebugger/main.cpp @@ -371,7 +371,13 @@ bool startDefaultDebugger(QString *errorMessage) if (debug) qDebug() << "Default" << defaultDebugger; QProcess p; +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + QStringList arguments = QProcess::splitCommand(defaultDebugger); + const QString executable = arguments.takeFirst(); + p.start(executable, arguments, QIODevice::NotOpen); +#else p.start(defaultDebugger, QIODevice::NotOpen); +#endif if (!p.waitForStarted()) { *errorMessage = QString::fromLatin1("Unable to start %1!").arg(defaultDebugger); return false;