From 0834fc1533d2f871ec6c62dff5ca8548adc25959 Mon Sep 17 00:00:00 2001 From: Nadia Holmquist Pedersen Date: Sat, 24 Apr 2021 15:30:10 +0200 Subject: [PATCH] Add support for building with Qt6 (#865) Co-authored-by: WaluigiWare64 <68647953+WaluigiWare64@users.noreply.github.com> --- src/frontend/qt_sdl/CMakeLists.txt | 45 ++++++++++++++++----- src/frontend/qt_sdl/CheatsDialog.cpp | 5 +++ src/frontend/qt_sdl/VideoSettingsDialog.cpp | 2 +- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/frontend/qt_sdl/CMakeLists.txt b/src/frontend/qt_sdl/CMakeLists.txt index b4da1034..36fc5773 100644 --- a/src/frontend/qt_sdl/CMakeLists.txt +++ b/src/frontend/qt_sdl/CMakeLists.txt @@ -32,20 +32,36 @@ SET(SOURCES_QT_SDL ../../../melon.qrc ) +option(USE_QT6 "Build using Qt 6 instead of 5" OFF) + if (WIN32) set(CMAKE_RC_COMPILE_OBJECT " -i -o ") endif() -if (BUILD_STATIC AND QT5_STATIC_DIR) - set(QT5_STATIC_BASE ${QT5_STATIC_DIR}/lib/cmake/Qt5) - set(Qt5_DIR ${QT5_STATIC_BASE}) - set(Qt5Core_DIR ${QT5_STATIC_BASE}Core) - set(Qt5Gui_DIR ${QT5_STATIC_BASE}Gui) - set(Qt5Widgets_DIR ${QT5_STATIC_BASE}Widgets) +if (USE_QT6) + if (BUILD_STATIC AND QT6_STATIC_DIR) + set(QT6_STATIC_BASE ${QT6_STATIC_DIR}/lib/cmake/Qt6) + set(Qt6_DIR ${QT6_STATIC_BASE}) + set(Qt6Core_DIR ${QT6_STATIC_BASE}Core) + set(Qt6Gui_DIR ${QT6_STATIC_BASE}Gui) + set(Qt6Widgets_DIR ${QT6_STATIC_BASE}Widgets) + set(Qt6OpenGL_DIR ${QT6_STATIC_BASE}OpenGL) + set(Qt6OpenGLWidgets_DIR ${QT6_STATIC_BASE}OpenGLWidgets) + endif() + find_package(Qt6 COMPONENTS Core Gui Widgets OpenGL OpenGLWidgets REQUIRED) + set(QT_LINK_LIBS Qt6::Core Qt6::Gui Qt6::Widgets Qt6::OpenGL Qt6::OpenGLWidgets) +else() + if (BUILD_STATIC AND QT5_STATIC_DIR) + set(QT5_STATIC_BASE ${QT5_STATIC_DIR}/lib/cmake/Qt5) + set(Qt5_DIR ${QT5_STATIC_BASE}) + set(Qt5Core_DIR ${QT5_STATIC_BASE}Core) + set(Qt5Gui_DIR ${QT5_STATIC_BASE}Gui) + set(Qt5Widgets_DIR ${QT5_STATIC_BASE}Widgets) + endif() + find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) + set(QT_LINK_LIBS Qt5::Core Qt5::Gui Qt5::Widgets) endif() -find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) - set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) @@ -87,7 +103,7 @@ endif() if (UNIX) option(PORTABLE "Make a portable build that looks for its configuration in the current directory" OFF) - target_link_libraries(melonDS Qt5::Core Qt5::Gui Qt5::Widgets) + target_link_libraries(melonDS ${QT_LINK_LIBS}) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") target_link_libraries(melonDS dl) endif() @@ -98,9 +114,9 @@ elseif (WIN32) target_link_libraries(melonDS comctl32 d2d1 dwrite uxtheme ws2_32 iphlpapi gdi32) if (BUILD_STATIC) - target_link_libraries(melonDS imm32 winmm version setupapi -static Qt5::Core Qt5::Gui Qt5::Widgets zstd) + target_link_libraries(melonDS imm32 winmm version setupapi -static z zstd ${QT_LINK_LIBS}) else() - target_link_libraries(melonDS Qt5::Core Qt5::Gui Qt5::Widgets) + target_link_libraries(melonDS ${QT_LINK_LIBS}) endif() endif() @@ -119,6 +135,13 @@ if (APPLE) target_sources(melonDS PRIVATE "${CMAKE_SOURCE_DIR}/melon.icns") set_source_files_properties("${CMAKE_SOURCE_DIR}/melon.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + # Qt 6 requires macOS 10.15 if building on 10.15 or greater + if(CMAKE_SYSTEM_VERSION VERSION_GREATER "10.14") + if (USE_QT6) + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) + endif() + endif() + option(MACOS_BUNDLE_LIBS "Bundle libraries with the app on macOS" OFF) option(MACOS_BUILD_DMG "Build DMG image of the macOS application bundle" OFF) diff --git a/src/frontend/qt_sdl/CheatsDialog.cpp b/src/frontend/qt_sdl/CheatsDialog.cpp index 8ba05d74..84e2a7ba 100644 --- a/src/frontend/qt_sdl/CheatsDialog.cpp +++ b/src/frontend/qt_sdl/CheatsDialog.cpp @@ -17,6 +17,7 @@ */ #include +#include #include #include @@ -319,7 +320,11 @@ void CheatsDialog::on_txtCode_textChanged() u32 codelen = 0; QString text = ui->txtCode->document()->toPlainText(); +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + QStringList lines = text.split('\n', Qt::SkipEmptyParts); +#else QStringList lines = text.split('\n', QString::SkipEmptyParts); +#endif for (QStringList::iterator it = lines.begin(); it != lines.end(); it++) { QString line = *it; diff --git a/src/frontend/qt_sdl/VideoSettingsDialog.cpp b/src/frontend/qt_sdl/VideoSettingsDialog.cpp index 68a281ec..0ea6f156 100644 --- a/src/frontend/qt_sdl/VideoSettingsDialog.cpp +++ b/src/frontend/qt_sdl/VideoSettingsDialog.cpp @@ -47,7 +47,7 @@ VideoSettingsDialog::VideoSettingsDialog(QWidget* parent) : QDialog(parent), ui( grp3DRenderer = new QButtonGroup(this); grp3DRenderer->addButton(ui->rb3DSoftware, 0); grp3DRenderer->addButton(ui->rb3DOpenGL, 1); - connect(grp3DRenderer, SIGNAL(buttonClicked(int)), this, SLOT(onChange3DRenderer(int))); + connect(grp3DRenderer, SIGNAL(idClicked(int)), this, SLOT(onChange3DRenderer(int))); grp3DRenderer->button(Config::_3DRenderer)->setChecked(true); #ifndef OGLRENDERER_ENABLED