]> Some of my projects - aniplayer.git/commitdiff
Initial Qt6 port master
authorAPTX <marek321@gmail.com>
Sun, 16 Oct 2022 06:44:39 +0000 (15:44 +0900)
committerAPTX <marek321@gmail.com>
Sun, 16 Oct 2022 06:44:49 +0000 (15:44 +0900)
Note that a complate Qt6 port will require QML changes.
I don't know of a way to have QML be compatible with both Qt5 and Qt6.

12 files changed:
CMakeLists.txt
backendplugins/backend_mpv/CMakeLists.txt
backendplugins/backend_mpv/qthelper.hpp
core/CMakeLists.txt
core/qtsingleapplication/CMakeLists.txt
core/qtsingleapplication/qtlocalpeer.cpp
featureplugins/feature_annotations/CMakeLists.txt
featureplugins/feature_localmylist/CMakeLists.txt
pluginapi/CMakeLists.txt
uiplugins/ui_desktop_qml_default/CMakeLists.txt
uiplugins/ui_desktop_qml_default/uidesktopqmldefault.cpp
uiplugins/ui_desktop_qml_default/uidesktopqmldefault.h

index c2e0f48b1dc947b975b216d9b90c4afbebdf6b32..70f8012f1c912ac8d411c0e0c9fa7ec5f75d7cef 100644 (file)
@@ -5,7 +5,10 @@ include(CMakeDependentOption)
 
 project(AniPlayer)
 
-set(QT_MIN_VERSION "5.3.0")
+
+
+option(WITH_QT6 "Build with Qt6" OFF)
+add_feature_info(BuildWithQt6 WITH_QT6 "Qt6 build")
 
 option(WITH_DESKTOP_UI "Build default QML desktop UI" ON)
 add_feature_info(QmlDesktopUI WITH_DESKTOP_UI "default desktop UI, using QML")
@@ -26,6 +29,18 @@ endif()
 
 cmake_dependent_option(USE_SHARED_DLIB "Use shared dlib" OFF "WITH_FEATURE_ANNOTATIONS" OFF)
 
+if (WITH_FEATURE_LOCALMYLIST AND WITH_QT6)
+    message(FATAL_ERROR "LocalMyList is currently not supported with Qt6")
+endif()
+
+if (WITH_QT6)
+    set(QT_PACKAGE "Qt6")
+    set(QT_MIN_VERSION "6.4.0")
+else()
+    set(QT_PACKAGE "Qt5")
+    set(QT_MIN_VERSION "5.3.0")
+endif()
+
 add_subdirectory(pluginapi)
 add_subdirectory(core)
 add_subdirectory(backendplugins)
index e075d7aec7c26a9c5af167c61e27b9fa7a6c9a87..e8fdfe202c86ddf66f4743be3a0365a48cba03b4 100644 (file)
@@ -1,16 +1,18 @@
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 project(backend_mpv)
 
-find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
+find_package(${QT_PACKAGE} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
     Core
     Gui
     Qml
     Quick
+    OpenGL
 )
 
 set(backend_mpv_LIBS
-    Qt5::Core
-    Qt5::Gui
+    ${QT_PACKAGE}::Core
+    ${QT_PACKAGE}::Gui
+    ${QT_PACKAGE}::OpenGL
     pluginapi
     # TODO find_package this
     mpv
index 5ea788540c6bb7d89dd83ec8d6340d1a5bd58c80..a7f178c62197b98127b6235d5f0a229af1b97739 100644 (file)
@@ -140,7 +140,11 @@ private:
         // "QVariant::Type(obsolete), the return value should be interpreted
         // as QMetaType::Type."
         // So a cast really seems to be needed to avoid warnings (urgh).
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+        return static_cast<int>(v.typeId()) == static_cast<int>(t);
+#else
         return static_cast<int>(v.type()) == static_cast<int>(t);
+#endif
     }
     void set(mpv_node *dst, const QVariant &src) {
         if (test_type(src, QMetaType::QString)) {
index 6109dc478a10aeb72e3c45fadefd6af36793fd99..e0449f8c41f3a9c0c75c675b9e634827aa2dc6aa 100644 (file)
@@ -7,7 +7,7 @@ set(core_VERSION "0.4.0")
 
 add_subdirectory("qtsingleapplication")
 
-find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
+find_package(${QT_PACKAGE} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
     Core
     Gui
     Widgets
@@ -15,14 +15,12 @@ find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
     Quick
 )
 
-find_package(LocalMyList CONFIG REQUIRED)
-
 set(core_LIBS
-    Qt5::Core
-    Qt5::Gui
-    Qt5::Widgets
-    Qt5::Qml
-    Qt5::Quick
+    ${QT_PACKAGE}::Core
+    ${QT_PACKAGE}::Gui
+    ${QT_PACKAGE}::Widgets
+    ${QT_PACKAGE}::Qml
+    ${QT_PACKAGE}::Quick
     pluginapi
     qtsingleapplication
 )
@@ -71,7 +69,7 @@ if (WIN32)
     )
 elseif(UNIX AND WITH_FEATURE_DBUS)
     add_definitions(-DWITH_FEATURE_DBUS)
-    find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
+    find_package(${QT_PACKAGE} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
         DBus
     )
     set(core_LIBS ${core_LIBS}
index 30a3d4608d66e9f38057d6edbf97bc37eaeefbdc..6a3d1776debd48d29cb0e0ee44022ae62fb64826 100644 (file)
@@ -1,16 +1,16 @@
 set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
 project(qtsingleapplication)
 
-find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
+find_package(${QT_PACKAGE} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
     Core
     Widgets
     Network
 )
 
 set(qtsingleapplication_LIBS
-    Qt5::Core
-    Qt5::Widgets
-    Qt5::Network
+    ${QT_PACKAGE}::Core
+    ${QT_PACKAGE}::Widgets
+    ${QT_PACKAGE}::Network
 )
 
 set(qtsingleapplication_SOURCES
index e4cf8040705181238dcef7737fa8318d581c8c51..31fb205178852b3503fb5235c89a3e4c52953a76 100644 (file)
 **
 ****************************************************************************/
 
-
 #include "qtlocalpeer.h"
 #include <QCoreApplication>
-#include <QTime>
 #include <QDataStream>
+#include <QRegularExpression>
+#include <QTime>
 
 #if defined(Q_OS_WIN)
 #include <QLibrary>
@@ -75,11 +75,16 @@ QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId)
 #endif
         prefix = id.section(QLatin1Char('/'), -1);
     }
-    prefix.remove(QRegExp("[^a-zA-Z]"));
+    prefix.remove(QRegularExpression("[^a-zA-Z]"));
     prefix.truncate(6);
 
     QByteArray idc = id.toUtf8();
-    quint16 idNum = qChecksum(idc.constData(), idc.size());
+    quint16 idNum =
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+        qChecksum(QByteArrayView{idc.constData(), idc.size()});
+#else
+        qChecksum(idc.constData(), idc.size());
+#endif
     socketName = QLatin1String("qtsingleapp-") + prefix
                  + QLatin1Char('-') + QString::number(idNum, 16);
 
index a55d4dc3886a83ccdd4bc1dad38484acc58322b9..afb6f76dc50ef737675e51117f0be84af930fd7b 100644 (file)
@@ -1,7 +1,7 @@
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 project(feature_annotations)
 
-find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
+find_package(${QT_PACKAGE} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
     Core
     Gui
     Concurrent
@@ -18,9 +18,9 @@ else()
 endif()
 
 set(feature_annotations_LIBS
-    Qt5::Core
-    Qt5::Gui
-    Qt5::Concurrent
+    ${QT_PACKAGE}::Core
+    ${QT_PACKAGE}::Gui
+    ${QT_PACKAGE}::Concurrent
     ${DLIB_LIBRARY_NAME}
     pluginapi
 )
index aff20389797fb6abe55ed5abc00a44437ca792ca..89a0bed8f0b4cc3435360acc55dcffbf20c027a0 100644 (file)
@@ -1,14 +1,14 @@
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 project(feature_localmylist)
 
-find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
+find_package(${QT_PACKAGE} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
     Core
 )
 
 find_package(LocalMyList CONFIG REQUIRED)
 
 set(feature_localmylist_LIBS
-    Qt5::Core
+    ${QT_PACKAGE}::Core
     pluginapi
     # TODO find_package this
     LocalMyList::LocalMyList
index 7522ec138a5f0c4e739b1c09c6132c3ff09950ba..4d2f49ed41ce2dcd8d3ec0c8cb700cf8295b573b 100644 (file)
@@ -10,8 +10,8 @@ set(pluginapi_PUBLIC_HEADERS
 )
 
 add_library(pluginapi INTERFACE ${pluginapi_PUBLIC_HEADERS})
-find_package(Qt5 COMPONENTS Core)
-target_link_libraries(pluginapi INTERFACE Qt5::Core)
+find_package(${QT_PACKAGE} COMPONENTS Core)
+target_link_libraries(pluginapi INTERFACE ${QT_PACKAGE}::Core)
 
 install(FILES ${pluginapi_PUBLIC_HEADERS}
     DESTINATION include/aniplayer
index 7df7b9a3ff59c261bd7d63b736d088dc29bf98e4..41d491be58d2478bc6ab9621e2c72333bcf5960f 100644 (file)
@@ -1,7 +1,7 @@
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 project(ui_desktop_qml_default)
 
-find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
+find_package(${QT_PACKAGE} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
     Core
     Gui
     Qml
@@ -9,13 +9,18 @@ find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
 )
 
 set(ui_desktop_qml_default_LIBS
-    Qt5::Core
-    Qt5::Gui
-    Qt5::Qml
-    Qt5::Quick
+    ${QT_PACKAGE}::Core
+    ${QT_PACKAGE}::Gui
+    ${QT_PACKAGE}::Qml
+    ${QT_PACKAGE}::Quick
     pluginapi
 )
 
+if (WITH_QT6)
+    find_package(${QT_PACKAGE} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS QuickControls2)
+    set(ui_desktop_qml_default_LIBS ${ui_desktop_qml_default_LIBS} ${QT_PACKAGE}::QuickControls2)
+endif()
+
 set(ui_desktop_qml_default_SOURCES
     uidesktopqmldefault.cpp
     timeformatter.cpp
@@ -30,7 +35,9 @@ set(ui_desktop_qml_default_HEADERS
 )
 
 set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTOUIC ON)
+# POSSIBLE CMAKE BUG
+# the "ui_" prefix makes cmake think there should be a .ui file to run uic on.
+set(CMAKE_AUTOUIC OFF)
 set(CMAKE_AUTORCC ON)
 
 add_library(ui_desktop_qml_default MODULE
index c38d5f0d341981b7110949f06074972a832afe44..fb91d6d2d0ff86ef44d0d8698efc2c1486a2c660 100644 (file)
@@ -23,9 +23,17 @@ UiDesktopQmlDefaultInstance::UiDesktopQmlDefaultInstance(QObject *player,
   qCDebug(uidqdCategory, "Player Added");\r
   engine->load(\r
       QUrl(QStringLiteral("qrc:/ui_desktop_qml_default/qml/main.qml")));\r
+  m_engine = engine;\r
+  m_player = player;\r
   qCDebug(uidqdCategory, "QML engine loaded");\r
 }\r
 \r
+UiDesktopQmlDefaultInstance::~UiDesktopQmlDefaultInstance() {\r
+  // Ensure the UI is deleted before the player\r
+  delete m_engine;\r
+  delete m_player;\r
+}\r
+\r
 UiInstance *UiDesktopQmlDefault::createUi(QObject *player, QObject *settings,\r
                                           QObject *parent) {\r
   return new UiDesktopQmlDefaultInstance{player, settings, parent};\r
index 928a7791b01f8b0b0cb3aa1a69e9e31202e0b4e3..8108375fed7644e05e9d3c1f06d3248003e28793 100644 (file)
@@ -11,6 +11,11 @@ class UI_DESKTOP_QML_DEFAULTSHARED_EXPORT UiDesktopQmlDefaultInstance
 public:\r
   explicit UiDesktopQmlDefaultInstance(QObject *player, QObject *settings,\r
                                        QObject *parent = nullptr);\r
+  ~UiDesktopQmlDefaultInstance() override;\r
+\r
+private:\r
+  QObject *m_engine;\r
+  QObject *m_player;\r
 };\r
 \r
 class UI_DESKTOP_QML_DEFAULTSHARED_EXPORT UiDesktopQmlDefault\r