From c4a4a41bebcf7dbc037ddd770d7a1a531e6d11bb Mon Sep 17 00:00:00 2001 From: Alberto Nidasio <nidasioalberto@gmail.com> Date: Fri, 2 Aug 2024 17:31:01 +0200 Subject: [PATCH] [Qt6] Updated codebase to Qt6 --- CMakeLists.txt | 16 +++--- src/main.cpp | 4 ++ .../Components/ErrorDisplayer/Error.cpp | 4 +- .../Components/ToggleButton/ToggleButton.cpp | 2 +- .../Components/ToggleButton/ToggleButton.h | 2 +- src/shared/Core/Message/Field.cpp | 6 +-- src/shared/Core/Message/Topic.cpp | 5 +- src/shared/Core/QCustomPlot/QCustomPlot.h | 52 ++++++------------- src/shared/Core/SkywardHubCore.cpp | 8 ++- src/shared/Core/XmlObject.cpp | 11 ++-- src/shared/Core/XmlObject.h | 3 +- .../CompactCommandPad/CommandSelector.cpp | 7 ++- .../Modules/Mavlink/BaseMavlinkModule.h | 4 +- .../OrientationVisualizer.cpp | 4 +- .../OrientationVisualizer.h | 5 +- .../OutgoingMessagesViewerModule.cpp | 6 +-- 16 files changed, 64 insertions(+), 75 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b061d2e..20882fc6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ set(MINGW_MSVCR_LIBRARY msvcrt CACHE STRING "Mingw MSVC runtime import library") add_subdirectory(libs/backward-cpp) # Qt5 and its modules -find_package(Qt5 REQUIRED COMPONENTS Widgets SerialPort PrintSupport 3DCore 3DExtras 3DRender 3DInput) +find_package(Qt6 REQUIRED COMPONENTS Widgets SerialPort PrintSupport 3DCore 3DExtras 3DRender 3DInput) add_executable(skywardhub # Primary files @@ -97,13 +97,13 @@ add_executable(skywardhub ) target_include_directories(skywardhub PRIVATE src/shared) target_link_libraries(skywardhub PUBLIC - Qt5::Widgets - Qt5::SerialPort - Qt5::PrintSupport - Qt5::3DCore - Qt5::3DExtras - Qt5::3DRender - Qt5::3DInput + Qt::Widgets + Qt::SerialPort + Qt::PrintSupport + Qt::3DCore + Qt::3DExtras + Qt::3DRender + Qt::3DInput Mavlink::Mavlink ) diff --git a/src/main.cpp b/src/main.cpp index 590a72e2..c8241e54 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,6 +19,7 @@ #include <Core/SkywardHubCore.h> #include <QApplication> +#include <QDebug> #include <QFile> #include "Core/CrashLogger.h" @@ -27,6 +28,9 @@ int main(int argc, char *argv[]) { QApplication application(argc, argv); + qDebug() << "WARNING: Hi mom!"; + qWarning() << "WARNING: Hi mom!"; + // Set application theme QFile styleSheet(":/assets/styles/global.qss"); styleSheet.open(QFile::ReadOnly); diff --git a/src/shared/Components/ErrorDisplayer/Error.cpp b/src/shared/Components/ErrorDisplayer/Error.cpp index 31622957..9cea81cb 100644 --- a/src/shared/Components/ErrorDisplayer/Error.cpp +++ b/src/shared/Components/ErrorDisplayer/Error.cpp @@ -31,7 +31,7 @@ Error::Error(ErrorDisplayer* _displayer, QString _title, QString _description, type = _type; layout.setSpacing(0); - layout.setMargin(0); + layout.setContentsMargins(0, 0, 0, 0); // setMaximumHeight(100); setMaximumWidth(250); @@ -116,7 +116,7 @@ void Error::mouseReleaseEvent(QMouseEvent* e) void Error::paintEvent(QPaintEvent* event) { QStyleOption opt; - opt.init(this); + opt.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); QWidget::paintEvent(event); diff --git a/src/shared/Components/ToggleButton/ToggleButton.cpp b/src/shared/Components/ToggleButton/ToggleButton.cpp index 38fe4ac6..3b853549 100644 --- a/src/shared/Components/ToggleButton/ToggleButton.cpp +++ b/src/shared/Components/ToggleButton/ToggleButton.cpp @@ -103,7 +103,7 @@ void ToggleButton::changeState(bool state) } } -void ToggleButton::enterEvent(QEvent* e) +void ToggleButton::enterEvent(QEnterEvent* e) { setCursor(Qt::PointingHandCursor); QAbstractButton::enterEvent(e); diff --git a/src/shared/Components/ToggleButton/ToggleButton.h b/src/shared/Components/ToggleButton/ToggleButton.h index 66121855..b4975f3a 100644 --- a/src/shared/Components/ToggleButton/ToggleButton.h +++ b/src/shared/Components/ToggleButton/ToggleButton.h @@ -54,7 +54,7 @@ signals: protected: void paintEvent(QPaintEvent*) override; void mouseReleaseEvent(QMouseEvent*) override; - void enterEvent(QEvent*) override; + void enterEvent(QEnterEvent*) override; void changeState(bool state); private: diff --git a/src/shared/Core/Message/Field.cpp b/src/shared/Core/Message/Field.cpp index 75d53204..05e1f69d 100644 --- a/src/shared/Core/Message/Field.cpp +++ b/src/shared/Core/Message/Field.cpp @@ -18,7 +18,7 @@ #include "Field.h" -#include <QRegExp> +#include <QRegularExpression> Field::Field() : type(Type::EMPTY) {} @@ -103,10 +103,10 @@ QString Field::toString() const QString str = QString::number(floatingPoint, 'f', 8); // Remove any number of trailing 0's - str.remove(QRegExp("0+$")); + str.remove(QRegularExpression("0+$")); // If the last character is just a '.' then remove it - str.remove(QRegExp("\\.$")); + str.remove(QRegularExpression("\\.$")); return str; } diff --git a/src/shared/Core/Message/Topic.cpp b/src/shared/Core/Message/Topic.cpp index e665063c..56914188 100644 --- a/src/shared/Core/Message/Topic.cpp +++ b/src/shared/Core/Message/Topic.cpp @@ -18,7 +18,7 @@ #include "Topic.h" -#include <QRegExp> +#include <QRegularExpression> Topic::Topic() : topic("") {} @@ -70,7 +70,8 @@ Topic Topic::getPrefix() const bool Topic::isValid() const { - return topic.contains(QRegExp("^[A-Za-z0-9$_]+(\\/[A-Za-z0-9$_]+)*$")); + return topic.contains( + QRegularExpression("^[A-Za-z0-9$_]+(\\/[A-Za-z0-9$_]+)*$")); } bool Topic::isWildcard() const diff --git a/src/shared/Core/QCustomPlot/QCustomPlot.h b/src/shared/Core/QCustomPlot/QCustomPlot.h index 45b1a36d..7979ee30 100644 --- a/src/shared/Core/QCustomPlot/QCustomPlot.h +++ b/src/shared/Core/QCustomPlot/QCustomPlot.h @@ -160,29 +160,9 @@ class QCPPolarGraph; It provides QMetaObject-based reflection of its enums and flags via \a QCP::staticMetaObject. */ -#ifndef Q_MOC_RUN namespace QCP { -#else -class QCP -{ // when in moc-run, make it look like a class, so we get Q_GADGET, - // Q_ENUMS/Q_FLAGS features in namespace - Q_GADGET - Q_ENUMS(ExportPen) - Q_ENUMS(ResolutionUnit) - Q_ENUMS(SignDomain) - Q_ENUMS(MarginSide) - Q_FLAGS(MarginSides) - Q_ENUMS(AntialiasedElement) - Q_FLAGS(AntialiasedElements) - Q_ENUMS(PlottingHint) - Q_FLAGS(PlottingHints) - Q_ENUMS(Interaction) - Q_FLAGS(Interactions) - Q_ENUMS(SelectionRectMode) - Q_ENUMS(SelectionType) -public: -#endif +Q_NAMESPACE /*! Defines the different units in which the image resolution can be specified in @@ -445,6 +425,20 @@ enum SelectionType ///< selected }; +Q_ENUM_NS(ExportPen) +Q_ENUM_NS(ResolutionUnit) +Q_ENUM_NS(SignDomain) +Q_ENUM_NS(MarginSide) +Q_FLAG_NS(MarginSides) +Q_ENUM_NS(AntialiasedElement) +Q_FLAG_NS(AntialiasedElements) +Q_ENUM_NS(PlottingHint) +Q_FLAG_NS(PlottingHints) +Q_ENUM_NS(Interaction) +Q_FLAG_NS(Interactions) +Q_ENUM_NS(SelectionRectMode) +Q_ENUM_NS(SelectionType) + /*! \internal Returns whether the specified \a value is considered an invalid data value for @@ -522,25 +516,13 @@ inline int getMarginValue(const QMargins &margins, QCP::MarginSide side) return 0; } -extern const QMetaObject - staticMetaObject; // in moc-run we create a static meta object for QCP - // "fake" object. This line is the link to it via - // QCP::staticMetaObject in normal operation as namespace - } // end of namespace QCP Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::AntialiasedElements) Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::PlottingHints) Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::MarginSides) Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::Interactions) -Q_DECLARE_METATYPE(QCP::ExportPen) -Q_DECLARE_METATYPE(QCP::ResolutionUnit) -Q_DECLARE_METATYPE(QCP::SignDomain) -Q_DECLARE_METATYPE(QCP::MarginSide) -Q_DECLARE_METATYPE(QCP::AntialiasedElement) -Q_DECLARE_METATYPE(QCP::PlottingHint) -Q_DECLARE_METATYPE(QCP::Interaction) -Q_DECLARE_METATYPE(QCP::SelectionRectMode) -Q_DECLARE_METATYPE(QCP::SelectionType) +// no need to use Q_DECLARE_METATYPE on enum since Q_ENUM_NS adds enum as +// metatype automatically /* end of 'src/global.h' */ diff --git a/src/shared/Core/SkywardHubCore.cpp b/src/shared/Core/SkywardHubCore.cpp index daa743ef..bb032ceb 100644 --- a/src/shared/Core/SkywardHubCore.cpp +++ b/src/shared/Core/SkywardHubCore.cpp @@ -27,6 +27,7 @@ #include <QCloseEvent> #include <QDir> +#include <QGuiApplication> #include <QMessageBox> SkywardHubCore& SkywardHubCore::getInstance() @@ -136,7 +137,12 @@ void SkywardHubCore::addWindowFromXml(XmlObject settings) { Window* newWindow = new Window(settings); newWindow->show(); - newWindow->activateWindow(); + + if (QGuiApplication::platformName() != "wayland") + { + newWindow->activateWindow(); + } + newWindow->setStyleSheet(activeThemeStyleSheet); windowsList.push_back(newWindow); diff --git a/src/shared/Core/XmlObject.cpp b/src/shared/Core/XmlObject.cpp index dc6b504b..759217f6 100644 --- a/src/shared/Core/XmlObject.cpp +++ b/src/shared/Core/XmlObject.cpp @@ -43,14 +43,15 @@ bool XmlObject::loadFromFile(const QString& filePath) return result; } -bool XmlObject::writeToFile(const QString& filePath, const QString& codec) const +bool XmlObject::writeToFile(const QString& filePath, + const QStringConverter::Encoding& encoding) const { bool result = false; QFile file(filePath); if (file.open(QIODevice::WriteOnly)) { QTextStream textStream(&file); - textStream.setCodec(codec.toUtf8()); + textStream.setEncoding(encoding); textStream << this->toXml(); file.close(); result = true; @@ -194,9 +195,9 @@ void XmlObject::swapChildAt(int i, int j) QString XmlObject::getChildObjectValue(const QString& objectName) { - auto result = std::find_if(childList.begin(), childList.end(), - [&](XmlObject child) - { return child.getObjectName() == objectName; }); + auto result = + std::find_if(childList.begin(), childList.end(), [&](XmlObject child) + { return child.getObjectName() == objectName; }); if (result != childList.end()) return result->getTextValue(); diff --git a/src/shared/Core/XmlObject.h b/src/shared/Core/XmlObject.h index f8cf20b6..cd115a29 100644 --- a/src/shared/Core/XmlObject.h +++ b/src/shared/Core/XmlObject.h @@ -31,7 +31,8 @@ public: bool loadFromFile(const QString& filePath); bool writeToFile(const QString& filePath, - const QString& codec = "UTF-8") const; + const QStringConverter::Encoding& encoding = + QStringConverter::Encoding::Utf8) const; QString toXml() const; void fromXml(const QString& txt); diff --git a/src/shared/Modules/CompactCommandPad/CommandSelector.cpp b/src/shared/Modules/CompactCommandPad/CommandSelector.cpp index 24497f54..e05a361e 100644 --- a/src/shared/Modules/CompactCommandPad/CommandSelector.cpp +++ b/src/shared/Modules/CompactCommandPad/CommandSelector.cpp @@ -38,7 +38,7 @@ XmlObject CommandSelector::toXmlObject(XmlObject& obj) bool ok; long timeout = continuosTimeoutEdit->text().toUInt(&ok); if (ok) - obj.addAttribute("timeout", QString() + timeout); + obj.addAttribute("timeout", QString("%1").arg(timeout)); auto key = messagesListComboBox->currentText(); if (formElements.contains(key)) @@ -59,7 +59,7 @@ void CommandSelector::fromXmlObject(const XmlObject& obj) timeout = str.toUInt(&ok); if (ok) - continuosTimeoutEdit->setText(QString() + timeout); + continuosTimeoutEdit->setText(QString("%1").arg(timeout)); if (obj.hasAttribute("message_id")) { @@ -102,8 +102,7 @@ void CommandSelector::setupUi() continuosCheck->setText("Continuos Send"); outerLayout->addWidget(continuosCheck); QObject::connect( - continuosCheck, &QCheckBox::stateChanged, - [this]() + continuosCheck, &QCheckBox::stateChanged, [this]() { continuosTimeoutEdit->setHidden(!continuosCheck->isChecked()); }); continuosTimeoutEdit = new QLineEdit(); diff --git a/src/shared/Modules/Mavlink/BaseMavlinkModule.h b/src/shared/Modules/Mavlink/BaseMavlinkModule.h index d7911d10..77a2c75f 100644 --- a/src/shared/Modules/Mavlink/BaseMavlinkModule.h +++ b/src/shared/Modules/Mavlink/BaseMavlinkModule.h @@ -28,8 +28,6 @@ #include "MavlinkCodec.h" #include "Ports/MavlinkPort.h" -Q_DECLARE_METATYPE(Message); - namespace Ui { class BaseMavlinkModule; @@ -86,4 +84,4 @@ private: int msgArrived = 0; static int ACTIVE_MAVLINK_MODULES; -}; \ No newline at end of file +}; diff --git a/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.cpp b/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.cpp index 78ea1c8b..d0681279 100644 --- a/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.cpp +++ b/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.cpp @@ -19,11 +19,11 @@ #include "OrientationVisualizer.h" #include <QBoxLayout> +#include <Qt3DCore/QAttribute> +#include <Qt3DCore/QBuffer> #include <Qt3DExtras/QConeMesh> #include <Qt3DExtras/QPhongMaterial> #include <Qt3DExtras/Qt3DWindow> -#include <Qt3DRender/QAttribute> -#include <Qt3DRender/QBuffer> #include <Qt3DRender/QCamera> OrientationVisualizer::OrientationVisualizer() diff --git a/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.h b/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.h index 062b3ea4..07817d26 100644 --- a/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.h +++ b/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.h @@ -21,11 +21,13 @@ #include <Modules/Module.h> #include <Qt3DRender/qpointlight.h> +#include <QGeometry> #include <QMesh> #include <QSizePolicy> #include <QSortPolicy> #include <QVector3D> #include <Qt3DCore/QAspectEngine> +#include <Qt3DCore/QBuffer> #include <Qt3DCore/QEntity> #include <Qt3DCore/QTransform> #include <Qt3DExtras/QConeMesh> @@ -40,11 +42,8 @@ #include <Qt3DExtras/QTorusMesh> #include <Qt3DExtras/Qt3DWindow> #include <Qt3DInput/QInputAspect> -#include <Qt3DRender/QAttribute> -#include <Qt3DRender/QBuffer> #include <Qt3DRender/QCamera> #include <Qt3DRender/QCameraLens> -#include <Qt3DRender/QGeometry> #include <Qt3DRender/QGeometryRenderer> #include <Qt3DRender/QRenderAspect> diff --git a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp index 7be4f30f..768eb5ef 100644 --- a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp +++ b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp @@ -38,13 +38,11 @@ OutgoingMessagesViewerModule::OutgoingMessagesViewerModule() MessageBroker::getInstance().subscribe( Filter::fromString(SkywardHubStrings::mavlink_received_msg_ACK_topic), - this, - [this](const Message& message, const Filter& filter) + this, [this](const Message& message, const Filter& filter) { handleAck(message); }); MessageBroker::getInstance().subscribe( Filter::fromString(SkywardHubStrings::mavlink_received_msg_NACK_topic), - this, - [this](const Message& message, const Filter& filter) + this, [this](const Message& message, const Filter& filter) { handleNack(message); }); MessageBroker::getInstance().subscribe( Filter::fromString(SkywardHubStrings::mavlink_received_msg_WACK_topic), -- GitLab