From 5266cc1909fa93ea478f75f42386febfe918e546 Mon Sep 17 00:00:00 2001 From: Lars Toenning Date: Sun, 17 Mar 2024 11:31:08 +0100 Subject: [PATCH] refactor: Port to Qt 6 --- .github/workflows/build.yml | 9 +- CMakeLists.txt | 3 +- cmake/install.cmake | 57 ++++----- cmake/pch_config.cmake | 1 + cmake/qt_deploy_mac.cmake | 3 +- cmake/qt_deploy_win.cmake | 9 +- cmake/tls/CMakeLists.txt | 21 ---- installer/installbuilder/project.xml | 2 +- .../{qt5-binaries.xml => qt6-binaries.xml} | 115 +++++++----------- installer/installbuilder/vcredist-x64.xml | 6 +- samples/blackmiscsim/sampleutils.h | 3 +- src/blackcore/afv/audio/input.cpp | 14 +-- src/blackcore/afv/audio/input.h | 4 +- src/blackcore/afv/audio/output.cpp | 27 ++-- src/blackcore/afv/audio/output.h | 9 +- .../afv/audio/soundcardsampleprovider.cpp | 8 +- src/blackcore/afv/clients/afvclient.cpp | 17 --- src/blackcore/afv/dto.h | 2 +- src/blackcore/aircraftmatcher.cpp | 2 +- src/blackcore/application.cpp | 4 +- src/blackcore/registermetadata.cpp | 3 - src/blackcore/threadedreader.cpp | 4 +- src/blackcore/threadedreader.h | 2 +- .../components/aircraftpartshistory.cpp | 2 +- .../components/aircraftpartshistory.h | 2 +- .../components/atcbuttoncomponent.cpp | 1 - .../cockpittranspondermodeledscomponent.cpp | 2 +- src/blackgui/components/navigatordialog.cpp | 3 +- src/blackgui/components/navigatordialog.h | 2 +- src/blackgui/components/scalescreenfactor.cpp | 19 +-- .../components/transpondermodeselector.h | 2 - src/blackgui/guiapplication.cpp | 18 +-- src/blackgui/guiutility.cpp | 26 ++-- src/blackgui/led.cpp | 2 +- src/blackgui/led.h | 1 - .../models/statusmessagelistmodel.cpp | 2 +- src/blackgui/pluginconfigwindow.cpp | 13 -- src/blackgui/pluginconfigwindow.h | 4 - src/blackgui/plugindetailswindow.cpp | 12 -- src/blackgui/plugindetailswindow.h | 4 - src/blackgui/settings/navigatorsettings.cpp | 2 +- src/blackgui/stylesheetutility.cpp | 2 +- src/blackgui/views/viewdbobjects.cpp | 2 +- src/blackinput/macos/joystickmacos.h | 5 - src/blackmisc/CMakeLists.txt | 2 +- src/blackmisc/audio/audiodeviceinfo.cpp | 11 +- src/blackmisc/audio/audiodeviceinfolist.cpp | 30 ++--- src/blackmisc/audio/audiodeviceinfolist.h | 10 +- src/blackmisc/audio/audioutils.cpp | 7 +- src/blackmisc/audio/registermetadataaudio.cpp | 1 - src/blackmisc/aviation/aircrafticaocode.cpp | 4 +- src/blackmisc/aviation/airlineicaocode.cpp | 2 +- src/blackmisc/aviation/callsign.h | 2 - src/blackmisc/aviation/callsignset.cpp | 3 - src/blackmisc/aviation/comsystem.cpp | 2 - src/blackmisc/aviation/selcal.h | 2 - src/blackmisc/collection.h | 4 +- src/blackmisc/containerbase.h | 2 +- src/blackmisc/datastream.h | 30 ----- src/blackmisc/dbus.h | 23 ---- src/blackmisc/dictionary.h | 1 - src/blackmisc/filelogger.cpp | 2 +- src/blackmisc/fileutils.cpp | 4 +- src/blackmisc/iconlist.cpp | 3 - src/blackmisc/input/registermetadatainput.cpp | 1 - src/blackmisc/json.h | 1 - src/blackmisc/logcategorylist.cpp | 1 - src/blackmisc/loghandler.cpp | 2 +- src/blackmisc/metaclass.h | 4 +- src/blackmisc/mixin/mixinhash.h | 18 +-- .../network/registermetadatanetwork.cpp | 2 - src/blackmisc/network/user.cpp | 2 +- src/blackmisc/platformset.cpp | 3 - src/blackmisc/pq/angle.cpp | 8 +- src/blackmisc/pq/measurementunit.h | 2 +- src/blackmisc/pq/physicalquantity.cpp | 2 +- src/blackmisc/pq/physicalquantity.h | 4 +- src/blackmisc/pq/time.cpp | 6 +- src/blackmisc/propertyindex.cpp | 14 +-- src/blackmisc/propertyindex.h | 8 +- src/blackmisc/propertyindexvariantmap.cpp | 2 +- src/blackmisc/propertyindexvariantmap.h | 4 +- src/blackmisc/registermetadata.cpp | 1 - src/blackmisc/sequence.h | 11 +- src/blackmisc/setbuilder.h | 2 - src/blackmisc/sharedstate/activeobserver.cpp | 4 +- src/blackmisc/sharedstate/dbus/duplex.cpp | 2 +- .../simulation/fscommon/aircraftcfgparser.cpp | 4 +- .../simulation/fscommon/fsdirectories.cpp | 4 +- .../interpolation/interpolatormulti.h | 2 +- .../simulation/registermetadatasimulation.cpp | 10 -- .../simulation/simulatorinternals.cpp | 1 - src/blackmisc/statusmessage.cpp | 3 +- src/blackmisc/statusmessage.h | 2 +- src/blackmisc/stringutils.cpp | 14 +-- src/blackmisc/valuecache.cpp | 1 - src/blackmisc/variant.cpp | 22 ++-- src/blackmisc/variant.h | 13 +- src/blackmisc/variantprivate.h | 11 +- src/blackmisc/worker.cpp | 2 +- src/blacksound/audioutilities.cpp | 91 ++++++-------- src/blacksound/audioutilities.h | 10 +- src/blacksound/notificationplayer.cpp | 7 -- .../sampleprovider/resourcesound.cpp | 2 +- src/blacksound/threadedtonepairplayer.cpp | 27 ++-- src/blacksound/threadedtonepairplayer.h | 5 +- src/blacksound/wav/wavfile.cpp | 22 ++-- .../flightgear/simulatorflightgear.cpp | 2 +- .../simulator/xplane/simulatorxplane.cpp | 6 +- tests/blackmisc/testslot/testslot.cpp | 2 +- tests/blackmisc/testvalueobject.h | 3 + third_party/simplecrypt/simplecrypt.cpp | 1 + 112 files changed, 358 insertions(+), 609 deletions(-) delete mode 100644 cmake/tls/CMakeLists.txt rename installer/installbuilder/{qt5-binaries.xml => qt6-binaries.xml} (68%) delete mode 100644 src/blackmisc/datastream.h diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f64c55c87..b74bbcdb2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ concurrency: env: do_vatsim_key: ${{ github.event_name == 'push' }} do_symbols: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - qt_version: 5.15.2 + qt_version: 6.8.0 bitrock_version: qt-professional-24.7.0 bitrock_url: https://releases.installbuilder.com/installbuilder externals: swift-project/externals @@ -94,6 +94,7 @@ jobs: uses: jurplel/install-qt-action@v4 with: version: ${{ env.qt_version }} + modules: 'qtmultimedia qt5compat' cache: true - name: Cache InstallBuilder id: cache-bitrock @@ -186,13 +187,14 @@ jobs: uses: jurplel/install-qt-action@v4 with: version: ${{ env.qt_version }} - arch: win64_msvc2019_64 + modules: 'qtmultimedia qt5compat' + arch: win64_msvc2022_64 cache: true - name: Install Qt debug info uses: jurplel/install-qt-action@v4 with: version: ${{ env.qt_version }} - arch: win64_msvc2019_64 + arch: win64_msvc2022_64 cache: true modules: debug_info extra: --archives qtbase @@ -283,6 +285,7 @@ jobs: uses: jurplel/install-qt-action@v4 with: version: ${{ env.qt_version }} + modules: 'qtmultimedia qt5compat' cache: true - name: Cache InstallBuilder id: cache-bitrock diff --git a/CMakeLists.txt b/CMakeLists.txt index 13576dae4..42d9b72ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,7 +91,7 @@ if(MSVC) endif() # Find dependencies -find_package(Qt5 REQUIRED COMPONENTS Core DBus Gui Multimedia Network OpenGL Concurrent Xml Qml Widgets Svg Test) +find_package(Qt6 REQUIRED COMPONENTS Core DBus Gui Multimedia Network OpenGL Concurrent Xml Qml Widgets Svg Test Core5Compat) # Global compiler options if(MSVC) @@ -147,7 +147,6 @@ add_subdirectory(cmake/msgpack) add_subdirectory(cmake/rapidjson) add_subdirectory(cmake/opus) add_subdirectory(cmake/crashpad) -add_subdirectory(cmake/tls) add_subdirectory(cmake/simconnect) add_subdirectory(cmake/dplay) add_subdirectory(third_party) diff --git a/cmake/install.cmake b/cmake/install.cmake index 2c74acff0..502d958fb 100644 --- a/cmake/install.cmake +++ b/cmake/install.cmake @@ -37,8 +37,8 @@ endif() # Workaround to get Qt paths for deployment (until switching to Qt6 deployment tool) if(UNIX AND NOT APPLE) - execute_process(COMMAND qmake -query QT_INSTALL_LIBS OUTPUT_VARIABLE QT_INSTALL_LIBS) - execute_process(COMMAND qmake -query QT_INSTALL_PLUGINS OUTPUT_VARIABLE QT_INSTALL_PLUGINS) + execute_process(COMMAND qmake6 -query QT_INSTALL_LIBS OUTPUT_VARIABLE QT_INSTALL_LIBS) + execute_process(COMMAND qmake6 -query QT_INSTALL_PLUGINS OUTPUT_VARIABLE QT_INSTALL_PLUGINS) # Avoid line breaks string(STRIP ${QT_INSTALL_LIBS} QT_INSTALL_LIBS) @@ -51,19 +51,19 @@ if(UNIX AND NOT APPLE) endfunction() - installLib(${QT_INSTALL_LIBS} libQt5Core.so.5) - installLib(${QT_INSTALL_LIBS} libQt5DBus.so.5) - installLib(${QT_INSTALL_LIBS} libQt5Gui.so.5) - installLib(${QT_INSTALL_LIBS} libQt5Multimedia.so.5) - installLib(${QT_INSTALL_LIBS} libQt5MultimediaWidgets.so.5) - installLib(${QT_INSTALL_LIBS} libQt5Network.so.5) - installLib(${QT_INSTALL_LIBS} libQt5OpenGL.so.5) - installLib(${QT_INSTALL_LIBS} libQt5Qml.so.5) - installLib(${QT_INSTALL_LIBS} libQt5Svg.so.5) - installLib(${QT_INSTALL_LIBS} libQt5Widgets.so.5) - installLib(${QT_INSTALL_LIBS} libQt5XcbQpa.so.5) - installLib(${QT_INSTALL_LIBS} libQt5Xml.so.5) - installLib(${QT_INSTALL_LIBS} libQt5MultimediaGstTools.so.5) + installLib(${QT_INSTALL_LIBS} libQt6Core.so.6) + installLib(${QT_INSTALL_LIBS} libQt6Core5Compat.so.6) + installLib(${QT_INSTALL_LIBS} libQt6DBus.so.6) + installLib(${QT_INSTALL_LIBS} libQt6Gui.so.6) + installLib(${QT_INSTALL_LIBS} libQt6Multimedia.so.6) + installLib(${QT_INSTALL_LIBS} libQt6MultimediaWidgets.so.6) + installLib(${QT_INSTALL_LIBS} libQt6Network.so.6) + installLib(${QT_INSTALL_LIBS} libQt6OpenGL.so.6) + installLib(${QT_INSTALL_LIBS} libQt6Qml.so.6) + installLib(${QT_INSTALL_LIBS} libQt6Svg.so.6) + installLib(${QT_INSTALL_LIBS} libQt6Widgets.so.6) + installLib(${QT_INSTALL_LIBS} libQt6XcbQpa.so.6) + installLib(${QT_INSTALL_LIBS} libQt6Xml.so.6) macro(resolve_symlink lib_name) # Adapted from CMake file() documentation @@ -76,12 +76,12 @@ if(UNIX AND NOT APPLE) endmacro() - if(EXISTS ${QT_INSTALL_LIBS}/libicui18n.so.56 AND EXISTS ${QT_INSTALL_LIBS}/libicuuc.so.56 AND EXISTS ${QT_INSTALL_LIBS}/libicudata.so.56) + if(EXISTS ${QT_INSTALL_LIBS}/libicui18n.so.73 AND EXISTS ${QT_INSTALL_LIBS}/libicuuc.so.73 AND EXISTS ${QT_INSTALL_LIBS}/libicudata.so.73) # Use specific requested version that is found in the Qt library dir (at least in the Github Actions environment) message(STATUS "Install specific libicu version from Qt dir") - installLib(${QT_INSTALL_LIBS} libicui18n.so.56) - installLib(${QT_INSTALL_LIBS} libicuuc.so.56) - installLib(${QT_INSTALL_LIBS} libicudata.so.56) + installLib(${QT_INSTALL_LIBS} libicui18n.so.73) + installLib(${QT_INSTALL_LIBS} libicuuc.so.73) + installLib(${QT_INSTALL_LIBS} libicudata.so.73) else() message(STATUS "Using systems libicu library") # This might not work for creating the installer as the version can differ @@ -92,21 +92,12 @@ if(UNIX AND NOT APPLE) install(FILES ${ICU_I18N_ABS} ${ICU_UC_ABS} ${ICU_DATA_ABS} TYPE LIB) endif() - file(GLOB audioPlugins ${QT_INSTALL_PLUGINS}/audio/*.so) - install(FILES ${audioPlugins} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/audio) - - file(GLOB bearerPlugins ${QT_INSTALL_PLUGINS}/bearer/*.so) - install(FILES ${bearerPlugins} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/bearer) - file(GLOB iconEnginePlugins ${QT_INSTALL_PLUGINS}/iconengines/*.so) install(FILES ${iconEnginePlugins} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/iconengines) file(GLOB imageformatsPlugins ${QT_INSTALL_PLUGINS}/imageformats/*.so) install(FILES ${imageformatsPlugins} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/imageformats) - file(GLOB mediaservicePlugins ${QT_INSTALL_PLUGINS}/mediaservice/*.so) - install(FILES ${mediaservicePlugins} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/mediaservice) - install(FILES ${QT_INSTALL_PLUGINS}/platforms/libqxcb.so DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/platforms) file(GLOB platforminputcontextsPlugins ${QT_INSTALL_PLUGINS}/platforminputcontexts/*.so) @@ -115,6 +106,9 @@ if(UNIX AND NOT APPLE) file(GLOB platformthemesPlugins ${QT_INSTALL_PLUGINS}/platformthemes/*.so) install(FILES ${platformthemesPlugins} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/platformthemes) + file(GLOB tlsPlugins ${QT_INSTALL_PLUGINS}/tls/*.so) + install(FILES ${tlsPlugins} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/tls) + file(GLOB xcbglintegrationsPlugins ${QT_INSTALL_PLUGINS}/xcbglintegrations/*.so) install(FILES ${xcbglintegrationsPlugins} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/xcbglintegrations) @@ -124,15 +118,14 @@ elseif(APPLE) install(SCRIPT ${PROJECT_SOURCE_DIR}/cmake/qt_deploy_mac.cmake) # Install plugins - execute_process(COMMAND qmake -query QT_INSTALL_PLUGINS OUTPUT_VARIABLE QT_INSTALL_PLUGINS) + execute_process(COMMAND qmake6 -query QT_INSTALL_PLUGINS OUTPUT_VARIABLE QT_INSTALL_PLUGINS) string(STRIP ${QT_INSTALL_PLUGINS} QT_INSTALL_PLUGINS) - install(DIRECTORY ${QT_INSTALL_PLUGINS}/audio DESTINATION bin FILES_MATCHING PATTERN "*.dylib") - install(DIRECTORY ${QT_INSTALL_PLUGINS}/bearer DESTINATION bin FILES_MATCHING PATTERN "*.dylib") install(DIRECTORY ${QT_INSTALL_PLUGINS}/iconengines DESTINATION bin FILES_MATCHING PATTERN "*.dylib") install(DIRECTORY ${QT_INSTALL_PLUGINS}/imageformats DESTINATION bin FILES_MATCHING PATTERN "*.dylib") - install(DIRECTORY ${QT_INSTALL_PLUGINS}/mediaservice DESTINATION bin FILES_MATCHING PATTERN "*.dylib") install(FILES ${QT_INSTALL_PLUGINS}/platforms/libqcocoa.dylib DESTINATION bin/platforms) install(DIRECTORY ${QT_INSTALL_PLUGINS}/platforminputcontexts DESTINATION bin FILES_MATCHING PATTERN "*.dylib") install(DIRECTORY ${QT_INSTALL_PLUGINS}/platformthemes DESTINATION bin FILES_MATCHING PATTERN "*.dylib") + install(DIRECTORY ${QT_INSTALL_PLUGINS}/tls DESTINATION bin FILES_MATCHING PATTERN "*.dylib") + endif() diff --git a/cmake/pch_config.cmake b/cmake/pch_config.cmake index b106cac76..a90eebc08 100644 --- a/cmake/pch_config.cmake +++ b/cmake/pch_config.cmake @@ -6,6 +6,7 @@ # For example "core" uses the same PCH as "misc" but with additional headers included. set(SWIFT_MISC_PCH + [["blackmisc/collection.h"]] [["blackmisc/containerbase.h"]] [["blackmisc/dbus.h"]] diff --git a/cmake/qt_deploy_mac.cmake b/cmake/qt_deploy_mac.cmake index 243840b06..5dbeb43d5 100644 --- a/cmake/qt_deploy_mac.cmake +++ b/cmake/qt_deploy_mac.cmake @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: Copyright (C) swift Project Community / Contributors # SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 -execute_process(COMMAND qmake -query QT_INSTALL_LIBS OUTPUT_VARIABLE QT_INSTALL_LIBS) +execute_process(COMMAND qmake6 -query QT_INSTALL_LIBS OUTPUT_VARIABLE QT_INSTALL_LIBS) string(STRIP ${QT_INSTALL_LIBS} QT_INSTALL_LIBS) @@ -12,6 +12,7 @@ endfunction() copy_framework(QtConcurrent) copy_framework(QtCore) +copy_framework(QtCore5Compat) copy_framework(QtDBus) copy_framework(QtGui) copy_framework(QtMultimedia) diff --git a/cmake/qt_deploy_win.cmake b/cmake/qt_deploy_win.cmake index 0c5b780d1..b94dea38a 100644 --- a/cmake/qt_deploy_win.cmake +++ b/cmake/qt_deploy_win.cmake @@ -2,7 +2,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 message(STATUS "Running windeployqt") -execute_process(COMMAND qmake -query QT_INSTALL_BINS OUTPUT_VARIABLE QT_INSTALL_BINS) +execute_process(COMMAND qmake6 -query QT_INSTALL_BINS OUTPUT_VARIABLE QT_INSTALL_BINS) string(STRIP ${QT_INSTALL_BINS} QT_INSTALL_BINS) @@ -19,11 +19,8 @@ execute_process(COMMAND ${QT_INSTALL_BINS}/windeployqt.exe --no-translations --no-compiler-runtime --no-system-d3d-compiler + --no-system-dxc-compiler --no-opengl-sw - --no-webkit2 - --no-virtualkeyboard -opengl # not detected automatically + --skip-plugin-types generic,multimedia,networkinformation,qmltooling WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin) - -# Remove unused files -file(REMOVE_RECURSE ${CMAKE_INSTALL_PREFIX}/bin/playlistformats ${CMAKE_INSTALL_PREFIX}/bin/styles) diff --git a/cmake/tls/CMakeLists.txt b/cmake/tls/CMakeLists.txt deleted file mode 100644 index c6cbe258b..000000000 --- a/cmake/tls/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (C) swift Project Community / Contributors -# SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 - -if(WIN32) - add_library(externals_ssl SHARED IMPORTED GLOBAL) - if(SWIFT_WIN32) - set_target_properties(externals_ssl PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/third_party/externals/win32-msvc/32/lib/libssl-1_1.dll) - elseif(SWIFT_WIN64) - set_target_properties(externals_ssl PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/third_party/externals/win32-msvc/64/lib/libssl-1_1-x64.dll) - endif() - install(IMPORTED_RUNTIME_ARTIFACTS externals_ssl) - - add_library(externals_crypto SHARED IMPORTED GLOBAL) - if(SWIFT_WIN32) - set_target_properties(externals_crypto PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/third_party/externals/win32-msvc/32/lib/libcrypto-1_1.dll) - elseif(SWIFT_WIN64) - set_target_properties(externals_crypto PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/third_party/externals/win32-msvc/64/lib/libcrypto-1_1-x64.dll) - endif() - install(IMPORTED_RUNTIME_ARTIFACTS externals_crypto) - -endif() diff --git a/installer/installbuilder/project.xml b/installer/installbuilder/project.xml index df6825b42..6eac101a1 100644 --- a/installer/installbuilder/project.xml +++ b/installer/installbuilder/project.xml @@ -19,7 +19,7 @@ swift.xml - qt5-binaries.xml + qt6-binaries.xml vcredist-x86.xml diff --git a/installer/installbuilder/qt5-binaries.xml b/installer/installbuilder/qt6-binaries.xml similarity index 68% rename from installer/installbuilder/qt5-binaries.xml rename to installer/installbuilder/qt6-binaries.xml index be95ea5cf..e76e34c40 100644 --- a/installer/installbuilder/qt5-binaries.xml +++ b/installer/installbuilder/qt6-binaries.xml @@ -3,10 +3,10 @@ SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 --> - qt5binaries - Qt5 binaries + qt6binaries + Qt6 binaries 1 - Qt5 runtime binaries + Qt6 runtime binaries 1 1 @@ -17,44 +17,37 @@ windows - 1 - ../../dist/bin/Qt5Core*.dll + ../../dist/bin/Qt6Core.dll - 1 - ../../dist/bin/Qt5DBus*.dll + ../../dist/bin/Qt6Core5Compat.dll - 1 - ../../dist/bin/Qt5Gui*.dll + ../../dist/bin/Qt6DBus.dll - 1 - ../../dist/bin/Qt5Multimedia*.dll + ../../dist/bin/Qt6Gui.dll - 1 - ../../dist/bin/Qt5Network*.dll + ../../dist/bin/Qt6Multimedia.dll - 1 - ../../dist/bin/Qt5OpenGL*.dll + ../../dist/bin/Qt6Network.dll - 1 - ../../dist/bin/Qt5Qml*.dll + ../../dist/bin/Qt6OpenGL.dll - 1 - ../../dist/bin/Qt5Svg*.dll + ../../dist/bin/Qt6Qml.dll - 1 - ../../dist/bin/Qt5Widgets*.dll + ../../dist/bin/Qt6Svg.dll - 1 - ../../dist/bin/Qt5Xml*.dll + ../../dist/bin/Qt6Widgets.dll + + + ../../dist/bin/Qt6Xml.dll ../../dist/bin/dbus-1-3.dll @@ -62,14 +55,6 @@ ../../dist/bin/dbus-daemon.exe - - 1 - ../../dist/bin/libcrypto-1_1*.dll - - - 1 - ../../dist/bin/libssl-1_1*.dll - @@ -79,52 +64,52 @@ linux linux-x64 - ../../dist/lib/libicudata.so.56 + ../../dist/lib/libicudata.so.73 - ../../dist/lib/libicui18n.so.56 + ../../dist/lib/libicui18n.so.73 - ../../dist/lib/libicuuc.so.56 + ../../dist/lib/libicuuc.so.73 - ../../dist/lib/libQt5Core.so.5 + ../../dist/lib/libQt6Core.so.6 - ../../dist/lib/libQt5DBus.so.5 + ../../dist/lib/libQt6Core5Compat.so.6 - ../../dist/lib/libQt5Gui.so.5 + ../../dist/lib/libQt6DBus.so.6 - ../../dist/lib/libQt5Multimedia.so.5 + ../../dist/lib/libQt6Gui.so.6 - ../../dist/lib/libQt5MultimediaGstTools.so.5 + ../../dist/lib/libQt6Multimedia.so.6 - ../../dist/lib/libQt5MultimediaWidgets.so.5 + ../../dist/lib/libQt6MultimediaWidgets.so.6 - ../../dist/lib/libQt5Network.so.5 + ../../dist/lib/libQt6Network.so.6 - ../../dist/lib/libQt5OpenGL.so.5 + ../../dist/lib/libQt6OpenGL.so.6 - ../../dist/lib/libQt5Qml.so.5 + ../../dist/lib/libQt6Qml.so.6 - ../../dist/lib/libQt5Svg.so.5 + ../../dist/lib/libQt6Svg.so.6 - ../../dist/lib/libQt5Widgets.so.5 + ../../dist/lib/libQt6Widgets.so.6 - ../../dist/lib/libQt5XcbQpa.so.5 + ../../dist/lib/libQt6XcbQpa.so.6 - ../../dist/lib/libQt5Xml.so.5 + ../../dist/lib/libQt6Xml.so.6 @@ -143,6 +128,9 @@ ../../dist/lib/QtCore.framework + + ../../dist/lib/QtCore5Compat.framework + ../../dist/lib/QtDBus.framework @@ -196,23 +184,12 @@ all - ../../dist/bin/audio - - - - - - ../../dist/bin/bearer - - - ../../dist/bin/iconengines + 1 + ../../dist/bin/iconengines* ../../dist/bin/imageformats - - ../../dist/bin/mediaservice - ../../dist/bin/platforms @@ -224,6 +201,13 @@ 1 ../../dist/bin/platformthemes* + + 1 + ../../dist/bin/styles* + + + ../../dist/bin/tls + 1 ../../dist/bin/xcbglintegrations* @@ -231,15 +215,4 @@ - - - ${installdir}/bin/audio/*wasapi*.dll - Delete old version of Qt audio plugin - - - windows - - - - diff --git a/installer/installbuilder/vcredist-x64.xml b/installer/installbuilder/vcredist-x64.xml index 755a7c614..382feecc0 100644 --- a/installer/installbuilder/vcredist-x64.xml +++ b/installer/installbuilder/vcredist-x64.xml @@ -4,7 +4,7 @@ --> vcruntime64 - Visual Studio 2019 x64 Redistributables + Visual Studio 2022 x64 Redistributables 0 1 1 @@ -19,7 +19,7 @@ 0 ${installdir}/vcredist/vc_redist.x64.exe /install /quiet /norestart - Installing Visual Studio 2019 x64 Redistributables + Installing Visual Studio 2022 x64 Redistributables 0 @@ -33,7 +33,7 @@ - Installation of MS Visual Studio 2019 x64 Redistributables failed! + Installation of MS Visual Studio 2022 x64 Redistributables failed! Error Code: ${program_exit_code} Check if another version was already installed and if not, try to run the installer manually from ${installdir}\vcredist\ diff --git a/samples/blackmiscsim/sampleutils.h b/samples/blackmiscsim/sampleutils.h index 75421aa02..4adbf6012 100644 --- a/samples/blackmiscsim/sampleutils.h +++ b/samples/blackmiscsim/sampleutils.h @@ -6,8 +6,9 @@ #ifndef BLACKSAMPLE_SAMPLEUTILS_H #define BLACKSAMPLE_SAMPLEUTILS_H +#include + class QString; -class QStringList; class QTextStream; namespace BlackMisc diff --git a/src/blackcore/afv/audio/input.cpp b/src/blackcore/afv/audio/input.cpp index 757c31d15..07a1c5e96 100644 --- a/src/blackcore/afv/audio/input.cpp +++ b/src/blackcore/afv/audio/input.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include using namespace BlackMisc; @@ -101,14 +101,11 @@ namespace BlackCore::Afv::Audio QAudioFormat inputFormat; inputFormat.setSampleRate(m_sampleRate); // normally 48000 inputFormat.setChannelCount(1); - inputFormat.setSampleSize(16); - inputFormat.setSampleType(QAudioFormat::SignedInt); - inputFormat.setByteOrder(QAudioFormat::LittleEndian); - inputFormat.setCodec("audio/pcm"); + inputFormat.setSampleFormat(QAudioFormat::Int16); - QAudioDeviceInfo selectedDevice = getLowestLatencyDevice(inputDevice, inputFormat); + QAudioDevice selectedDevice = getLowestLatencyDevice(inputDevice, inputFormat); m_inputFormat = inputFormat; - m_audioInput.reset(new QAudioInput(selectedDevice, m_inputFormat)); + m_audioInput.reset(new QAudioSource(selectedDevice, m_inputFormat)); if (!m_audioInputBuffer) { m_audioInputBuffer = new CAudioInputBuffer(this); } else { m_audioInputBuffer->disconnect(); } // make sure disconnected in any case m_audioInputBuffer->start(m_inputFormat); @@ -139,7 +136,7 @@ namespace BlackCore::Afv::Audio m_started = true; #endif const QString format = toQString(m_inputFormat); - CLogMessage(this).info(u"Starting: '%1' with: %2") << selectedDevice.deviceName() << format; + CLogMessage(this).info(u"Starting: '%1' with: %2") << selectedDevice.description() << format; } void CInput::stop() @@ -158,6 +155,7 @@ namespace BlackCore::Afv::Audio void CInput::audioInDataAvailable(const QByteArray &frame) { + static_assert(Q_BYTE_ORDER == Q_LITTLE_ENDIAN); QVector samples = convertBytesTo16BitPCM(frame); if (m_inputFormat.channelCount() == 2) diff --git a/src/blackcore/afv/audio/input.h b/src/blackcore/afv/audio/input.h index 3388caaf2..325cd8479 100644 --- a/src/blackcore/afv/audio/input.h +++ b/src/blackcore/afv/audio/input.h @@ -14,7 +14,7 @@ # include "blackmisc/macos/microphoneaccess.h" #endif -#include +#include #include #include #include @@ -138,7 +138,7 @@ namespace BlackCore::Afv::Audio int m_sampleRate = 0; BlackSound::Codecs::COpusEncoder m_encoder; - QScopedPointer m_audioInput; + QScopedPointer m_audioInput; BlackMisc::Audio::CAudioDeviceInfo m_device; QAudioFormat m_inputFormat; diff --git a/src/blackcore/afv/audio/output.cpp b/src/blackcore/afv/audio/output.cpp index 3d8e4826c..8854bfb31 100644 --- a/src/blackcore/afv/audio/output.cpp +++ b/src/blackcore/afv/audio/output.cpp @@ -26,9 +26,22 @@ namespace BlackCore::Afv::Audio this->setObjectName(on); } +#ifdef Q_OS_WIN + qint64 CAudioOutputBuffer::bytesAvailable() const + { + // Workaround to mimic the pre-Qt6 behavior. + // With Qt6, the QAudioSink on Windows uses the bytesAvailable function to trigger + // a call to readData() only when data is available. Other platforms still use a + // pull procedure that automatically calls readData() afer a specific period. Until + // a proper solution for the bytesAvailable() is implemented, this uses a fixed number. + // readData() will handle it itself if actually no data is available. + return 3840 + QIODevice::bytesAvailable(); + } +#endif + qint64 CAudioOutputBuffer::readData(char *data, qint64 maxlen) { - const int sampleBytes = m_outputFormat.sampleSize() / 8; + const int sampleBytes = m_outputFormat.bytesPerSample(); const int channelCount = m_outputFormat.channelCount(); const qint64 count = maxlen / (sampleBytes * channelCount); QVector buffer; @@ -92,16 +105,14 @@ namespace BlackCore::Afv::Audio QAudioFormat outputFormat; outputFormat.setSampleRate(48000); outputFormat.setChannelCount(1); - outputFormat.setSampleSize(32); - outputFormat.setSampleType(QAudioFormat::Float); - outputFormat.setByteOrder(QAudioFormat::LittleEndian); - outputFormat.setCodec("audio/pcm"); + outputFormat.setSampleFormat(QAudioFormat::Float); + static_assert(Q_BYTE_ORDER == Q_LITTLE_ENDIAN); const QString format = toQString(outputFormat); - const QAudioDeviceInfo selectedDevice = getLowestLatencyDevice(outputDevice, outputFormat); - CLogMessage(this).info(u"Starting: '%1' with: %2") << selectedDevice.deviceName() << format; + const QAudioDevice selectedDevice = getLowestLatencyDevice(outputDevice, outputFormat); + CLogMessage(this).info(u"Starting: '%1' with: %2") << selectedDevice.description() << format; - m_audioOutput.reset(new QAudioOutput(selectedDevice, outputFormat)); + m_audioOutput.reset(new QAudioSink(selectedDevice, outputFormat)); m_audioOutputBuffer->open(QIODevice::ReadWrite | QIODevice::Unbuffered); m_audioOutputBuffer->setAudioFormat(outputFormat); m_audioOutput->start(m_audioOutputBuffer); diff --git a/src/blackcore/afv/audio/output.h b/src/blackcore/afv/audio/output.h index 4c69348c5..bd3923461 100644 --- a/src/blackcore/afv/audio/output.h +++ b/src/blackcore/afv/audio/output.h @@ -10,7 +10,7 @@ #include "blackmisc/audio/audiodeviceinfo.h" #include -#include +#include namespace BlackCore::Afv::Audio { @@ -39,6 +39,11 @@ namespace BlackCore::Afv::Audio void outputVolumeStream(const OutputVolumeStreamArgs &args); protected: +#ifdef Q_OS_WIN + //! \copydoc QIODevice::bytesAvailable + qint64 bytesAvailable() const override; +#endif + //! \copydoc QIODevice::readData virtual qint64 readData(char *data, qint64 maxlen) override; @@ -95,7 +100,7 @@ namespace BlackCore::Afv::Audio private: bool m_started = false; BlackMisc::Audio::CAudioDeviceInfo m_device; - QScopedPointer m_audioOutput; + QScopedPointer m_audioOutput; CAudioOutputBuffer *m_audioOutputBuffer = nullptr; }; } // ns diff --git a/src/blackcore/afv/audio/soundcardsampleprovider.cpp b/src/blackcore/afv/audio/soundcardsampleprovider.cpp index 5e710a19c..a191be12b 100644 --- a/src/blackcore/afv/audio/soundcardsampleprovider.cpp +++ b/src/blackcore/afv/audio/soundcardsampleprovider.cpp @@ -19,10 +19,8 @@ namespace BlackCore::Afv::Audio m_waveFormat.setSampleRate(sampleRate); m_waveFormat.setChannelCount(1); - m_waveFormat.setSampleSize(16); - m_waveFormat.setSampleType(QAudioFormat::SignedInt); - m_waveFormat.setByteOrder(QAudioFormat::LittleEndian); - m_waveFormat.setCodec("audio/pcm"); + m_waveFormat.setSampleFormat(QAudioFormat::Int16); + static_assert(Q_BYTE_ORDER == Q_LITTLE_ENDIAN); m_mixer = new CMixingSampleProvider(this); m_receiverIDs = transceiverIDs; @@ -148,7 +146,7 @@ namespace BlackCore::Afv::Audio return p->getId() == radioTransceiver.id; }); - if (it) + if (it != m_receiverInputs.end()) { (*it)->setFrequency(radioTransceiver.frequencyHz); } diff --git a/src/blackcore/afv/clients/afvclient.cpp b/src/blackcore/afv/clients/afvclient.cpp index 5ebabdf5e..6e6593ae6 100644 --- a/src/blackcore/afv/clients/afvclient.cpp +++ b/src/blackcore/afv/clients/afvclient.cpp @@ -1025,23 +1025,6 @@ namespace BlackCore::Afv::Clients void CAfvClient::initialize() { -#ifdef Q_OS_WIN - if (!m_winCoInitialized) - { - HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); - - // RPC_E_CHANGED_MODE: CoInitializeEx was already called by someone else in this thread with a different mode. - if (hr == RPC_E_CHANGED_MODE) - { - CLogMessage(this).debug(u"CoInitializeEx was already called with a different mode. Trying again."); - hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); - } - - // S_OK: The COM library was initialized successfully on this thread. - // S_FALSE: The COM library is already initialized on this thread. Reference count was incremented. This is not an error. - if (hr == S_OK || hr == S_FALSE) { m_winCoInitialized = true; } - } -#endif CLogMessage(this).info(u"Initialize AFV client in thread %1") << CThreadUtils::currentThreadInfo(); } diff --git a/src/blackcore/afv/dto.h b/src/blackcore/afv/dto.h index 077572201..ac8353b6b 100644 --- a/src/blackcore/afv/dto.h +++ b/src/blackcore/afv/dto.h @@ -168,7 +168,7 @@ namespace BlackCore::Afv static StationDto fromJson(const QJsonObject &json) { StationDto dto; - dto.id = json.value("id").toString(); + dto.id = QUuid(json.value("id").toString()); dto.name = json.value("name").toString(); dto.frequencyHz = static_cast(json.value("frequency").toInt()); dto.frequencyAliasHz = static_cast(json.value("frequencyAlias").toInt()); diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index 59c326051..ef9a133e2 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -1963,7 +1963,7 @@ namespace BlackCore QString CAircraftMatcher::scoresToString(const ScoredModels &scores, int lastElements) { if (scores.isEmpty()) { return {}; } - QMapIterator i(scores); + QMultiMapIterator i(scores); i.toBack(); int c = 0; QString str; diff --git a/src/blackcore/application.cpp b/src/blackcore/application.cpp index a8a69f1a2..f9a9d44ca 100644 --- a/src/blackcore/application.cpp +++ b/src/blackcore/application.cpp @@ -392,7 +392,7 @@ namespace BlackCore bool CApplication::hasWebDataServices() const { if (this->isShuttingDown()) { return false; } // service will not survive for long - return m_webDataServices; + return !m_webDataServices.isNull(); } CWebDataServices *CApplication::getWebDataServices() const @@ -1300,7 +1300,7 @@ namespace BlackCore bool CApplication::hasSetupReader() const { - return m_setupReader; + return !m_setupReader.isNull(); } CSetupReader *CApplication::getSetupReader() const diff --git a/src/blackcore/registermetadata.cpp b/src/blackcore/registermetadata.cpp index 95eae9b61..b2cccd0e5 100644 --- a/src/blackcore/registermetadata.cpp +++ b/src/blackcore/registermetadata.cpp @@ -40,9 +40,6 @@ namespace BlackCore qDBusRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); - Db::CDatabaseReaderConfig::registerMetadata(); Db::CDatabaseReaderConfigList::registerMetadata(); Data::CGlobalSetup::registerMetadata(); diff --git a/src/blackcore/threadedreader.cpp b/src/blackcore/threadedreader.cpp index 98535ce1d..5d7ed1d17 100644 --- a/src/blackcore/threadedreader.cpp +++ b/src/blackcore/threadedreader.cpp @@ -86,12 +86,12 @@ namespace BlackCore bool CThreadedReader::didContentChange(const QString &content, int startPosition) { - uint oldHash = 0; + size_t oldHash = 0; { QReadLocker rl(&m_lock); oldHash = m_contentHash; } - uint newHash = qHash(startPosition < 0 ? content : content.mid(startPosition)); + size_t newHash = qHash(startPosition < 0 ? content : content.mid(startPosition)); if (oldHash == newHash) { return false; } { QWriteLocker wl(&m_lock); diff --git a/src/blackcore/threadedreader.h b/src/blackcore/threadedreader.h index 620103d43..4f014f4d3 100644 --- a/src/blackcore/threadedreader.h +++ b/src/blackcore/threadedreader.h @@ -144,7 +144,7 @@ namespace BlackCore int m_initialTime = -1; //!< Initial start delay int m_periodicTime = -1; //!< Periodic time after which the task is repeated QDateTime m_updateTimestamp; //!< when file/resource was read - uint m_contentHash = 0; //!< has of the content given + size_t m_contentHash = 0; //!< has of the content given std::atomic_bool m_markedAsFailed { false }; //!< marker if reading failed bool m_unitTest { false }; //!< mark as unit test BlackMisc::Network::CUrlLogList m_urlReadLog; //!< URL based reading can be logged diff --git a/src/blackgui/components/aircraftpartshistory.cpp b/src/blackgui/components/aircraftpartshistory.cpp index bf509a499..dd60c6ba9 100644 --- a/src/blackgui/components/aircraftpartshistory.cpp +++ b/src/blackgui/components/aircraftpartshistory.cpp @@ -121,7 +121,7 @@ namespace BlackGui::Components } } - const uint hash = qHash(html); + const size_t hash = qHash(html); if (hash == m_htmlHash) { return; } // avoid to always scroll to the end when there is no update m_htmlHash = hash; m_text.setHtml(html); diff --git a/src/blackgui/components/aircraftpartshistory.h b/src/blackgui/components/aircraftpartshistory.h index 0bbaeb36f..8449f2bb0 100644 --- a/src/blackgui/components/aircraftpartshistory.h +++ b/src/blackgui/components/aircraftpartshistory.h @@ -36,7 +36,7 @@ namespace BlackGui::Components QScopedPointer ui; QTimer m_timerUpdateHistory; QTextDocument m_text { this }; - uint m_htmlHash = 0; + size_t m_htmlHash = 0; //! Init void initGui(); diff --git a/src/blackgui/components/atcbuttoncomponent.cpp b/src/blackgui/components/atcbuttoncomponent.cpp index 6eaddc004..aa7801a93 100644 --- a/src/blackgui/components/atcbuttoncomponent.cpp +++ b/src/blackgui/components/atcbuttoncomponent.cpp @@ -52,7 +52,6 @@ namespace BlackGui::Components layout->setObjectName("gl_CAtcButtonComponent"); layout->setSpacing(4); - layout->setMargin(0); layout->setContentsMargins(0, 0, 0, 0); int row = 0; diff --git a/src/blackgui/components/cockpittranspondermodeledscomponent.cpp b/src/blackgui/components/cockpittranspondermodeledscomponent.cpp index 15e495dc9..69d48ea93 100644 --- a/src/blackgui/components/cockpittranspondermodeledscomponent.cpp +++ b/src/blackgui/components/cockpittranspondermodeledscomponent.cpp @@ -78,7 +78,7 @@ namespace BlackGui::Components if (horizontal) { ledLayout = new QHBoxLayout(this); } else { ledLayout = new QVBoxLayout(this); } - ledLayout->setMargin(0); + ledLayout->setContentsMargins(0, 0, 0, 0); ledLayout->addWidget(m_ledStandby.data()); ledLayout->addWidget(m_ledModes.data()); ledLayout->addWidget(m_ledIdent.data()); diff --git a/src/blackgui/components/navigatordialog.cpp b/src/blackgui/components/navigatordialog.cpp index ace72316a..3e6f1f134 100644 --- a/src/blackgui/components/navigatordialog.cpp +++ b/src/blackgui/components/navigatordialog.cpp @@ -86,7 +86,6 @@ namespace BlackGui::Components QGridLayout *gridLayout = new QGridLayout(ui->fr_NavigatorDialogInner); gridLayout->setObjectName("gl_CNavigatorDialog"); gridLayout->setSpacing(0); - gridLayout->setMargin(0); gridLayout->setContentsMargins(0, 0, 0, 0); ui->fr_NavigatorDialogInner->setLayout(gridLayout); int r = 0; @@ -257,7 +256,7 @@ namespace BlackGui::Components QDialog::paintEvent(event); } - void CNavigatorDialog::enterEvent(QEvent *event) + void CNavigatorDialog::enterEvent(QEnterEvent *event) { // event called when mouse is over, acts as auto-focus QApplication::setActiveWindow(this); diff --git a/src/blackgui/components/navigatordialog.h b/src/blackgui/components/navigatordialog.h index 590fbc771..b8247a443 100644 --- a/src/blackgui/components/navigatordialog.h +++ b/src/blackgui/components/navigatordialog.h @@ -99,7 +99,7 @@ namespace BlackGui::Components virtual void paintEvent(QPaintEvent *event) override; //! \copydoc QDialog::enterEvent - virtual void enterEvent(QEvent *event) override; + virtual void enterEvent(QEnterEvent *event) override; //! @} private: diff --git a/src/blackgui/components/scalescreenfactor.cpp b/src/blackgui/components/scalescreenfactor.cpp index 2db13678d..7d30ac465 100644 --- a/src/blackgui/components/scalescreenfactor.cpp +++ b/src/blackgui/components/scalescreenfactor.cpp @@ -5,7 +5,6 @@ #include "ui_scalescreenfactor.h" #include "blackgui/guiutility.h" -#include #include #include @@ -20,23 +19,7 @@ namespace BlackGui::Components connect(ui->hs_Factor, &QSlider::valueChanged, this, &CScaleScreenFactor::onSliderChanged); connect(ui->le_Factor, &QLineEdit::editingFinished, this, &CScaleScreenFactor::onEditFinished); - const QDesktopWidget *w = qApp->desktop(); - const QString tt = QStringLiteral( - "Scaling only works on High DPI screens\n" - "Width/height: %1/%2 Ratio: %3\n" - "Logical DPI x/y: %4/%5\n" - "Physical DPI x/y: %6/%7\n" - "width/height MM: %8/%9") - .arg(w->width()) - .arg(w->height()) - .arg(QString::number(CGuiUtility::mainApplicationWidgetPixelRatio(), 'f', 2)) - .arg(w->logicalDpiX()) - .arg(w->logicalDpiY()) - .arg(w->physicalDpiX()) - .arg(w->physicalDpiY()) - .arg(w->widthMM()) - .arg(w->heightMM()); - + const QString tt = QStringLiteral("Scaling only works on High DPI screens"); this->setToolTip(tt); } diff --git a/src/blackgui/components/transpondermodeselector.h b/src/blackgui/components/transpondermodeselector.h index f2cbcb011..82ec980f0 100644 --- a/src/blackgui/components/transpondermodeselector.h +++ b/src/blackgui/components/transpondermodeselector.h @@ -14,8 +14,6 @@ #include #include -class QStringList; - namespace BlackGui::Components { //! Selector for the transponder mode diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index 07dae16a2..1d781e60b 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include @@ -305,9 +304,6 @@ namespace BlackGui sf = cleanNumber(sf); - QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support - QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); // HiDPI pixmaps - // qputenv("QT_ENABLE_HIGHDPI_SCALING", "1"); QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Floor); @@ -323,9 +319,15 @@ namespace BlackGui QScreen *CGuiApplication::currentScreen() { const QWidget *w = CGuiApplication::mainApplicationWidget(); - const int s = QApplication::desktop()->screenNumber(w); - if (s >= 0 && s < QGuiApplication::screens().size()) { return QGuiApplication::screens().at(s); } - return QGuiApplication::primaryScreen(); + if (!w) return QGuiApplication::primaryScreen(); + + const QWindow *win = w->windowHandle(); + + if (!win) return QGuiApplication::primaryScreen(); + + QScreen *screen = win->screen(); + + return screen ? screen : QGuiApplication::primaryScreen(); } QRect CGuiApplication::currentScreenGeometry() @@ -352,7 +354,7 @@ namespace BlackGui int CGuiApplication::hashForStateSettingsSchema(const QMainWindow *window) { - unsigned int hash = 0; + size_t hash = 0; for (auto obj : window->findChildren(QString(), Qt::FindDirectChildrenOnly)) { hash ^= qHash(obj->objectName()); diff --git a/src/blackgui/guiutility.cpp b/src/blackgui/guiutility.cpp index f620b610c..e118a8ff3 100644 --- a/src/blackgui/guiutility.cpp +++ b/src/blackgui/guiutility.cpp @@ -36,7 +36,6 @@ #include #include #include -#include // for the screen size @@ -110,10 +109,12 @@ namespace BlackGui QSize CGuiUtility::desktopSize() { const QWidget *mw = CGuiUtility::mainApplicationWidget(); - if (mw) { return QApplication::desktop()->screenGeometry(mw).size(); } + if (!mw) return QGuiApplication::primaryScreen()->size(); - // main screen - return QApplication::desktop()->screenGeometry(QApplication::desktop()).size(); + const QWindow *win = mw->windowHandle(); + if (!win) return QGuiApplication::primaryScreen()->size(); + + return win->size(); } namespace Private @@ -742,9 +743,8 @@ namespace BlackGui static const QString s("01234567890123456789012345678901234567890123456789012345678901234567890123456789"); const QFontMetricsF fm = CGuiUtility::currentFontMetricsF(); const qreal scale = withRatio ? CGuiUtility::mainApplicationWidgetPixelRatio() : 1.0; - const qreal w = fm.width(s) * scale; - const qreal h = fm.height() * scale; - return QSizeF(w, h); + const QSizeF size = fm.size(Qt::TextSingleLine, s); + return size * scale; } QSizeF CGuiUtility::fontMetricsLazyDog43Chars(bool withRatio) @@ -753,9 +753,8 @@ namespace BlackGui static const QString s("The quick brown fox jumps over the lazy dog"); const QFontMetricsF fm = CGuiUtility::currentFontMetrics(); const qreal scale = withRatio ? CGuiUtility::mainApplicationWidgetPixelRatio() : 1.0; - const qreal w = fm.width(s) * scale; - const qreal h = fm.height() * scale; - return QSizeF(w, h); + const QSizeF size = fm.size(Qt::TextSingleLine, s); + return size * scale; } QSizeF CGuiUtility::fontMetricsEstimateSize(int xCharacters, int yCharacters, bool withRatio) @@ -773,8 +772,8 @@ namespace BlackGui void CGuiUtility::centerWidget(QWidget *widget) { - // const QRect screenGeometry = QApplication::desktop()->screenGeometry(); - const QScreen *pScreen = QGuiApplication::screenAt(widget->mapToGlobal({ widget->width() / 2, 0 })); + const QPoint point(widget->width() / 2.0, 0); + const QScreen *pScreen = QGuiApplication::screenAt(widget->mapToGlobal(point)); const QRect screenGeometry = pScreen->availableGeometry(); const int x = (screenGeometry.width() - widget->width()) / 2; const int y = (screenGeometry.height() - widget->height()) / 2; @@ -808,8 +807,7 @@ namespace BlackGui const QWidget *mainWidget = CGuiUtility::mainApplicationWidget(); if (mainWidget) { - // const QSize sd = QApplication::desktop()->screenGeometry().size(); - const QSize sd = QApplication::desktop()->screenGeometry(mainWidget).size(); + const QSize sd = QGuiApplication::primaryScreen()->geometry().size(); desktop = QStringLiteral("Desktop w%1 w%2").arg(sd.width()).arg(sd.height()); ratio = QStringLiteral("ratio: %1").arg(mainWidget->devicePixelRatioF()); } diff --git a/src/blackgui/led.cpp b/src/blackgui/led.cpp index 0a67b0e0d..f39a72987 100644 --- a/src/blackgui/led.cpp +++ b/src/blackgui/led.cpp @@ -278,7 +278,7 @@ namespace BlackGui { // init style sheets with this widget QStyleOption opt; - opt.init(this); + opt.initFrom(this); // paint QPainter painter(this); diff --git a/src/blackgui/led.h b/src/blackgui/led.h index b2b3147b3..f26ab51c1 100644 --- a/src/blackgui/led.h +++ b/src/blackgui/led.h @@ -19,7 +19,6 @@ class QMouseEvent; class QPaintEvent; -class QStringList; class QSvgRenderer; namespace BlackGui diff --git a/src/blackgui/models/statusmessagelistmodel.cpp b/src/blackgui/models/statusmessagelistmodel.cpp index e3d4838bc..e5766f001 100644 --- a/src/blackgui/models/statusmessagelistmodel.cpp +++ b/src/blackgui/models/statusmessagelistmodel.cpp @@ -58,7 +58,7 @@ namespace BlackGui::Models bool CStatusMessageListModel::sortedByTimestampOrOrder(const CPropertyIndex &p) { if (p.isEmpty()) { return false; } - const int last = p.indexVector().last(); + const int last = p.indexList().last(); return IOrderable::isAnyOrderIndex(last) || ITimestampBased::isAnyTimestampIndex(last); } diff --git a/src/blackgui/pluginconfigwindow.cpp b/src/blackgui/pluginconfigwindow.cpp index 35deed2b3..fbe1b631a 100644 --- a/src/blackgui/pluginconfigwindow.cpp +++ b/src/blackgui/pluginconfigwindow.cpp @@ -4,7 +4,6 @@ #include "blackgui/pluginconfigwindow.h" #include -#include #include #include #include @@ -15,16 +14,4 @@ namespace BlackGui { this->setWindowModality(Qt::WindowModal); } - - void CPluginConfigWindow::showEvent(QShowEvent *event) - { - this->setGeometry( - QStyle::alignedRect( - Qt::LeftToRight, - Qt::AlignCenter, - this->size(), - QDesktopWidget().screenGeometry(qApp->activeWindow()))); - - Q_UNUSED(event); - } } diff --git a/src/blackgui/pluginconfigwindow.h b/src/blackgui/pluginconfigwindow.h index 05b9375cf..c5ca1f6fe 100644 --- a/src/blackgui/pluginconfigwindow.h +++ b/src/blackgui/pluginconfigwindow.h @@ -22,10 +22,6 @@ namespace BlackGui public: //! No parent explicit CPluginConfigWindow(QWidget *parent); - - protected: - //! \copydoc QWidget::showEvent() - virtual void showEvent(QShowEvent *event) override; }; } diff --git a/src/blackgui/plugindetailswindow.cpp b/src/blackgui/plugindetailswindow.cpp index bf9396c8f..c98bb0fc7 100644 --- a/src/blackgui/plugindetailswindow.cpp +++ b/src/blackgui/plugindetailswindow.cpp @@ -5,7 +5,6 @@ #include "ui_plugindetailswindow.h" #include -#include #include #include #include @@ -52,15 +51,4 @@ namespace BlackGui { ui->lbl_Authors->setText(authors); } - - void CPluginDetailsWindow::showEvent(QShowEvent *event) - { - this->setGeometry( - QStyle::alignedRect( - Qt::LeftToRight, - Qt::AlignCenter, - this->size(), - QDesktopWidget().screenGeometry(qApp->activeWindow()))); - Q_UNUSED(event); - } } diff --git a/src/blackgui/plugindetailswindow.h b/src/blackgui/plugindetailswindow.h index 7cac896c0..cefc0e001 100644 --- a/src/blackgui/plugindetailswindow.h +++ b/src/blackgui/plugindetailswindow.h @@ -47,10 +47,6 @@ namespace BlackGui //! Sets the plugin authors void setPluginAuthors(const QString &authors); - protected: - //! \copydoc QWidget::showEvent() - virtual void showEvent(QShowEvent *event) override; - private: QScopedPointer ui; }; diff --git a/src/blackgui/settings/navigatorsettings.cpp b/src/blackgui/settings/navigatorsettings.cpp index a7e763ed8..30a0e0cf1 100644 --- a/src/blackgui/settings/navigatorsettings.cpp +++ b/src/blackgui/settings/navigatorsettings.cpp @@ -54,7 +54,7 @@ namespace BlackGui::Settings s.append(boolToTrueFalse(this->m_frameless)); s.append(separator); s.append("columns: "); - s.append(this->m_columns); + s.append(QString::number(this->m_columns)); return s; } diff --git a/src/blackgui/stylesheetutility.cpp b/src/blackgui/stylesheetutility.cpp index 782a55d83..e2fa234ef 100644 --- a/src/blackgui/stylesheetutility.cpp +++ b/src/blackgui/stylesheetutility.cpp @@ -232,7 +232,7 @@ namespace BlackGui QString fs; if (font.pixelSize() >= 0) { - fs.append(font.pixelSize()).append("px"); + fs.append(QString::number(font.pixelSize())).append("px"); } else { diff --git a/src/blackgui/views/viewdbobjects.cpp b/src/blackgui/views/viewdbobjects.cpp index ea7b66628..64e89605d 100644 --- a/src/blackgui/views/viewdbobjects.cpp +++ b/src/blackgui/views/viewdbobjects.cpp @@ -148,7 +148,7 @@ namespace BlackGui::Views { m_frame = new QFrame(this); QHBoxLayout *layout = new QHBoxLayout(m_frame); - layout->setMargin(2); + layout->setContentsMargins(2, 2, 2, 2); m_frame->setLayout(layout); m_leOrder = new QLineEdit(m_frame); QLabel *icon = new QLabel(m_frame); diff --git a/src/blackinput/macos/joystickmacos.h b/src/blackinput/macos/joystickmacos.h index 8a97d7ae4..37ce5f1e5 100644 --- a/src/blackinput/macos/joystickmacos.h +++ b/src/blackinput/macos/joystickmacos.h @@ -41,11 +41,6 @@ namespace BlackInput void buttonChanged(const BlackMisc::Input::CJoystickButton &joystickButton, bool isPressed); private: - friend bool operator==(const CJoystickDevice &lhs, const CJoystickDevice &rhs); - - //! Poll the device buttons - void pollDeviceState(); - void processButtonEvent(IOHIDValueRef value); static void valueCallback(void *context, IOReturn result, void *sender, IOHIDValueRef value); diff --git a/src/blackmisc/CMakeLists.txt b/src/blackmisc/CMakeLists.txt index c5448234e..a477efc15 100644 --- a/src/blackmisc/CMakeLists.txt +++ b/src/blackmisc/CMakeLists.txt @@ -200,7 +200,6 @@ add_library(misc SHARED crashinfo.h datacache.cpp datacache.h - datastream.h dbus.cpp dbus.h dbusserver.cpp @@ -702,6 +701,7 @@ target_link_libraries(misc Qt::Network Qt::Multimedia externals_rapidjson # used by xswiftbussettingsqtfree.inc + Qt::Core5Compat # for QStringRef PRIVATE Qt::Xml SimpleCrypt diff --git a/src/blackmisc/audio/audiodeviceinfo.cpp b/src/blackmisc/audio/audiodeviceinfo.cpp index e7f85d944..aec6c952b 100644 --- a/src/blackmisc/audio/audiodeviceinfo.cpp +++ b/src/blackmisc/audio/audiodeviceinfo.cpp @@ -9,7 +9,8 @@ #include #include #include -#include +#include +#include BLACK_DEFINE_VALUEOBJECT_MIXINS(BlackMisc::Audio, CAudioDeviceInfo) @@ -26,8 +27,8 @@ namespace BlackMisc::Audio { if (m_deviceName.isEmpty()) { return false; } if (m_deviceName == "default") { return true; } - if (this->isInputDevice() && m_deviceName == QAudioDeviceInfo::defaultInputDevice().deviceName()) { return true; } - if (this->isOutputDevice() && m_deviceName == QAudioDeviceInfo::defaultOutputDevice().deviceName()) { return true; } + if (this->isInputDevice() && m_deviceName == QMediaDevices::defaultAudioInput().description()) { return true; } + if (this->isOutputDevice() && m_deviceName == QMediaDevices::defaultAudioOutput().description()) { return true; } return false; } @@ -48,12 +49,12 @@ namespace BlackMisc::Audio CAudioDeviceInfo CAudioDeviceInfo::getDefaultOutputDevice() { - return CAudioDeviceInfo(OutputDevice, QAudioDeviceInfo::defaultOutputDevice().deviceName()); + return CAudioDeviceInfo(OutputDevice, QMediaDevices::defaultAudioOutput().description()); } CAudioDeviceInfo CAudioDeviceInfo::getDefaultInputDevice() { - return CAudioDeviceInfo(InputDevice, QAudioDeviceInfo::defaultInputDevice().deviceName()); + return CAudioDeviceInfo(InputDevice, QMediaDevices::defaultAudioInput().description()); } QVariant CAudioDeviceInfo::propertyByIndex(CPropertyIndexRef index) const diff --git a/src/blackmisc/audio/audiodeviceinfolist.cpp b/src/blackmisc/audio/audiodeviceinfolist.cpp index d4876a372..f0f98ac3c 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.cpp +++ b/src/blackmisc/audio/audiodeviceinfolist.cpp @@ -5,7 +5,7 @@ #include "blackmisc/stringutils.h" #include -#include +#include #include BLACK_DEFINE_SEQUENCE_MIXINS(BlackMisc::Audio, CAudioDeviceInfo, CAudioDeviceInfoList) @@ -147,9 +147,9 @@ namespace BlackMisc::Audio CAudioDeviceInfoList CAudioDeviceInfoList::allInputDevices() { CAudioDeviceInfoList devices; - for (const QAudioDeviceInfo &inputDevice : allQtInputDevices()) + for (const QAudioDevice &inputDevice : allQtInputDevices()) { - const CAudioDeviceInfo d(CAudioDeviceInfo::InputDevice, inputDevice.deviceName()); + const CAudioDeviceInfo d(CAudioDeviceInfo::InputDevice, inputDevice.description()); if (!devices.contains(d)) { devices.push_back(d); } } return devices; @@ -158,9 +158,9 @@ namespace BlackMisc::Audio CAudioDeviceInfoList CAudioDeviceInfoList::allOutputDevices() { CAudioDeviceInfoList devices; - for (const QAudioDeviceInfo &outputDevice : allQtOutputDevices()) + for (const QAudioDevice &outputDevice : allQtOutputDevices()) { - const CAudioDeviceInfo d(CAudioDeviceInfo::OutputDevice, outputDevice.deviceName()); + const CAudioDeviceInfo d(CAudioDeviceInfo::OutputDevice, outputDevice.description()); if (!devices.contains(d)) { devices.push_back(d); } } return devices; @@ -194,36 +194,36 @@ namespace BlackMisc::Audio return i; } - QList CAudioDeviceInfoList::allQtInputDevices() + QList CAudioDeviceInfoList::allQtInputDevices() { - const QList devices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput); + const QList devices = QMediaDevices::audioInputs(); return devices; } - QList CAudioDeviceInfoList::allQtOutputDevices() + QList CAudioDeviceInfoList::allQtOutputDevices() { - const QList devices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); + const QList devices = QMediaDevices::audioOutputs(); return devices; } - QAudioDeviceInfo CAudioDeviceInfoList::defaultQtInputDevice() + QAudioDevice CAudioDeviceInfoList::defaultQtInputDevice() { - return QAudioDeviceInfo::defaultInputDevice(); + return QMediaDevices::defaultAudioInput(); } - QAudioDeviceInfo CAudioDeviceInfoList::defaultQtOutputDevice() + QAudioDevice CAudioDeviceInfoList::defaultQtOutputDevice() { - return QAudioDeviceInfo::defaultOutputDevice(); + return QMediaDevices::defaultAudioOutput(); } CAudioDeviceInfo CAudioDeviceInfoList::defaultInputDevice() { - return CAudioDeviceInfo(CAudioDeviceInfo::InputDevice, defaultQtInputDevice().deviceName()); + return CAudioDeviceInfo(CAudioDeviceInfo::InputDevice, defaultQtInputDevice().description()); } CAudioDeviceInfo CAudioDeviceInfoList::defaultOutputDevice() { - return CAudioDeviceInfo(CAudioDeviceInfo::OutputDevice, defaultQtOutputDevice().deviceName()); + return CAudioDeviceInfo(CAudioDeviceInfo::OutputDevice, defaultQtOutputDevice().description()); } } // namespace diff --git a/src/blackmisc/audio/audiodeviceinfolist.h b/src/blackmisc/audio/audiodeviceinfolist.h index 930091649..fc40bfe0a 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.h +++ b/src/blackmisc/audio/audiodeviceinfolist.h @@ -13,7 +13,7 @@ #include "blackmisc/blackmiscexport.h" #include -#include +#include #include BLACK_DECLARE_SEQUENCE_MIXINS(BlackMisc::Audio, CAudioDeviceInfo, CAudioDeviceInfoList) @@ -88,10 +88,10 @@ namespace BlackMisc::Audio static CAudioDeviceInfoList allInputDevicesPlusDefault(); static CAudioDeviceInfoList allOutputDevicesPlusDefault(); static CAudioDeviceInfoList allDevicesPlusDefault(); - static QList allQtInputDevices(); - static QList allQtOutputDevices(); - static QAudioDeviceInfo defaultQtInputDevice(); - static QAudioDeviceInfo defaultQtOutputDevice(); + static QList allQtInputDevices(); + static QList allQtOutputDevices(); + static QAudioDevice defaultQtInputDevice(); + static QAudioDevice defaultQtOutputDevice(); static CAudioDeviceInfo defaultInputDevice(); static CAudioDeviceInfo defaultOutputDevice(); //! @} diff --git a/src/blackmisc/audio/audioutils.cpp b/src/blackmisc/audio/audioutils.cpp index 6c06ed7ab..260aea11d 100644 --- a/src/blackmisc/audio/audioutils.cpp +++ b/src/blackmisc/audio/audioutils.cpp @@ -5,7 +5,7 @@ #include "blackmisc/audio/audioutils.h" #include -#include +#include using namespace BlackConfig; @@ -23,8 +23,9 @@ namespace BlackMisc::Audio // force init of device lists // see https://discordapp.com/channels/539048679160676382/539925070550794240/676418182038421534 - QAudioDeviceInfo::availableDevices(QAudio::AudioInput); - QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); + // TODO Is this still required with Qt 6? + QMediaDevices::audioInputs(); + QMediaDevices::audioOutputs(); } } // ns diff --git a/src/blackmisc/audio/registermetadataaudio.cpp b/src/blackmisc/audio/registermetadataaudio.cpp index 7c6e9d8d6..4c273b9f2 100644 --- a/src/blackmisc/audio/registermetadataaudio.cpp +++ b/src/blackmisc/audio/registermetadataaudio.cpp @@ -24,7 +24,6 @@ namespace BlackMisc // ENUMs qDBusRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); } } diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index ebb351793..f09ae167f 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -822,10 +822,10 @@ namespace BlackMisc::Aviation } // turn E to P engine - if (combinedCode.endsWith("E")) { return QStringList({ combinedCode.leftRef(2) % u'P' }); } + if (combinedCode.endsWith("E")) { return QStringList({ QStringView { combinedCode }.left(2) % u'P' }); } // turn T to H plane (tilt wing to helicopter - if (combinedCode.startsWith("T")) { return QStringList({ u'H' % combinedCode.rightRef(2) }); } + if (combinedCode.startsWith("T")) { return QStringList({ u'H' % QStringView { combinedCode }.right(2) }); } // based on engine count QStringList codes; diff --git a/src/blackmisc/aviation/airlineicaocode.cpp b/src/blackmisc/aviation/airlineicaocode.cpp index 4e1ea37bc..0d978dbe8 100644 --- a/src/blackmisc/aviation/airlineicaocode.cpp +++ b/src/blackmisc/aviation/airlineicaocode.cpp @@ -511,7 +511,7 @@ namespace BlackMisc::Aviation bool ok = fn.size() > 5; if (!ok) { continue; } BLACK_VERIFY_X(ok, Q_FUNC_INFO, "wrong file name"); - const int id = fn.leftRef(5).toInt(&ok); + const int id = QStringView { fn }.left(5).toInt(&ok); BLACK_VERIFY_X(ok, Q_FUNC_INFO, "wrong id format"); if (!ok) { continue; } ids.insert(id); diff --git a/src/blackmisc/aviation/callsign.h b/src/blackmisc/aviation/callsign.h index 590c8916f..acfdeff00 100644 --- a/src/blackmisc/aviation/callsign.h +++ b/src/blackmisc/aviation/callsign.h @@ -15,8 +15,6 @@ #include #include -class QStringList; - BLACK_DECLARE_VALUEOBJECT_MIXINS(BlackMisc::Aviation, CCallsign) namespace BlackMisc diff --git a/src/blackmisc/aviation/callsignset.cpp b/src/blackmisc/aviation/callsignset.cpp index 8b5f79212..c228ced24 100644 --- a/src/blackmisc/aviation/callsignset.cpp +++ b/src/blackmisc/aviation/callsignset.cpp @@ -58,13 +58,10 @@ namespace BlackMisc::Aviation { qRegisterMetaType>(); qDBusRegisterMetaType>(); - qRegisterMetaTypeStreamOperators>(); qRegisterMetaType>(); qDBusRegisterMetaType>(); - qRegisterMetaTypeStreamOperators>(); qRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); registerMetaValueType(); } } // namespace diff --git a/src/blackmisc/aviation/comsystem.cpp b/src/blackmisc/aviation/comsystem.cpp index 3ea9e3a29..cb6c26cc9 100644 --- a/src/blackmisc/aviation/comsystem.cpp +++ b/src/blackmisc/aviation/comsystem.cpp @@ -19,8 +19,6 @@ namespace BlackMisc::Aviation Mixin::MetaType::registerMetadata(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); } void CComSystem::setFrequencyActiveMHz(double frequencyMHz) diff --git a/src/blackmisc/aviation/selcal.h b/src/blackmisc/aviation/selcal.h index e53d929bb..3bc4041ab 100644 --- a/src/blackmisc/aviation/selcal.h +++ b/src/blackmisc/aviation/selcal.h @@ -15,8 +15,6 @@ #include #include -class QStringList; - BLACK_DECLARE_VALUEOBJECT_MIXINS(BlackMisc::Aviation, CSelcal) namespace BlackMisc::PhysicalQuantities { diff --git a/src/blackmisc/collection.h b/src/blackmisc/collection.h index 1409f3e7b..9b14d26bd 100644 --- a/src/blackmisc/collection.h +++ b/src/blackmisc/collection.h @@ -280,15 +280,13 @@ namespace BlackMisc //! Remove the element pointed to by the given iterator. //! \return An iterator to the position of the next element after the one removed. - //! \fixme Relying on implementation detail of QMap to reinterpret_cast to the necessary iterator type. iterator erase(iterator pos) { - return m_impl.erase(const_cast *&>(reinterpret_cast *&>(pos))); + return m_impl.erase(pos); } //! Remove the range of elements between two iterators. //! \return An iterator to the position of the next element after the one removed. - //! \fixme Relying on implementation detail of QMap to reinterpret_cast to the necessary iterator type. iterator erase(iterator it1, iterator it2) { while (it1 != it2) { it1 = erase(it1); } diff --git a/src/blackmisc/containerbase.h b/src/blackmisc/containerbase.h index 0707f12b1..85747eeee 100644 --- a/src/blackmisc/containerbase.h +++ b/src/blackmisc/containerbase.h @@ -105,7 +105,7 @@ namespace BlackMisc } //! Simplifies composition, returns 0 for performance - friend uint qHash(const Derived &) { return 0; } // clazy:exclude=qhash-namespace + friend size_t qHash(const Derived &) { return 0; } // clazy:exclude=qhash-namespace //! \copydoc BlackMisc::Mixin::JsonByMetaClass::toJson QJsonObject toJson() const diff --git a/src/blackmisc/datastream.h b/src/blackmisc/datastream.h deleted file mode 100644 index 863a3bbf2..000000000 --- a/src/blackmisc/datastream.h +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors -// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 - -//! \file - -#ifndef BLACKMISC_DATASTREAM_H -#define BLACKMISC_DATASTREAM_H - -#include -#include - -/*! - * Operator for marshalling pairs with QDataStream. - */ -template -QDataStream &operator<<(QDataStream &stream, const std::pair &pair) -{ - return stream << pair.first << pair.second; -} - -/*! - * Operator for unmarshalling pairs with QDataStream. - */ -template -QDataStream &operator>>(QDataStream &stream, std::pair &pair) -{ - return stream >> pair.first >> pair.second; -} - -#endif diff --git a/src/blackmisc/dbus.h b/src/blackmisc/dbus.h index 632fb8c91..e36cb267d 100644 --- a/src/blackmisc/dbus.h +++ b/src/blackmisc/dbus.h @@ -77,29 +77,6 @@ const QDBusArgument &operator>>(const QDBusArgument &arg, QFlags &value) return arg; } -/*! - * Operator for streaming pairs to QDBusArgument. - */ -template -QDBusArgument &operator<<(QDBusArgument &arg, const std::pair &pair) -{ - arg.beginStructure(); - arg << pair.first << pair.second; - arg.endStructure(); - return arg; -} - -/*! - * Operator for streaming pairs from QDBusArgument. - */ -template -const QDBusArgument &operator>>(const QDBusArgument &arg, std::pair &pair) -{ - arg.beginStructure(); - arg >> pair.first >> pair.second; - arg.endStructure(); - return arg; -} // *INDENT-ON* //! Windows: prevents unloading of QtDBus shared library until the process is terminated. diff --git a/src/blackmisc/dictionary.h b/src/blackmisc/dictionary.h index e7df8715f..eb7fc3e0d 100644 --- a/src/blackmisc/dictionary.h +++ b/src/blackmisc/dictionary.h @@ -9,7 +9,6 @@ #include "blackmisc/containerbase.h" #include "blackmisc/mixin/mixindbus.h" #include "blackmisc/mixin/mixindatastream.h" -#include "blackmisc/datastream.h" #include "blackmisc/inheritancetraits.h" #include "blackmisc/iterator.h" #include "blackmisc/mixin/mixinjson.h" diff --git a/src/blackmisc/filelogger.cpp b/src/blackmisc/filelogger.cpp index caa8656d0..406e5a2b9 100644 --- a/src/blackmisc/filelogger.cpp +++ b/src/blackmisc/filelogger.cpp @@ -46,7 +46,7 @@ namespace BlackMisc m_logFile.setFileName(getLogFilePath()); m_logFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text); m_stream.setDevice(&m_logFile); - m_stream.setCodec("UTF-8"); + m_stream.setEncoding(QStringConverter::Utf8); writeHeaderToFile(); } diff --git a/src/blackmisc/fileutils.cpp b/src/blackmisc/fileutils.cpp index f68bd1e9c..e05b9d058 100644 --- a/src/blackmisc/fileutils.cpp +++ b/src/blackmisc/fileutils.cpp @@ -366,7 +366,7 @@ namespace BlackMisc QFileInfo CFileUtils::findLastModified(const QDir &dir, bool recursive, const QStringList &nameFilters, const QStringList &excludeDirectories) { - if (isExcludedDirectory(dir, excludeDirectories)) { return QString(); } + if (isExcludedDirectory(dir, excludeDirectories)) { return {}; } const QFileInfoList files = enumerateFiles(dir, recursive, nameFilters, excludeDirectories); if (files.isEmpty()) { return {}; } @@ -378,7 +378,7 @@ namespace BlackMisc QFileInfo CFileUtils::findLastCreated(const QDir &dir, bool recursive, const QStringList &nameFilters, const QStringList &excludeDirectories) { - if (isExcludedDirectory(dir, excludeDirectories)) { return QString(); } + if (isExcludedDirectory(dir, excludeDirectories)) { return {}; } const QFileInfoList files = enumerateFiles(dir, recursive, nameFilters, excludeDirectories); if (files.isEmpty()) { return {}; } diff --git a/src/blackmisc/iconlist.cpp b/src/blackmisc/iconlist.cpp index 7c1f1d18b..f9c4b68ec 100644 --- a/src/blackmisc/iconlist.cpp +++ b/src/blackmisc/iconlist.cpp @@ -21,13 +21,10 @@ namespace BlackMisc { qRegisterMetaType>(); qDBusRegisterMetaType>(); - qRegisterMetaTypeStreamOperators>(); qRegisterMetaType>(); qDBusRegisterMetaType>(); - qRegisterMetaTypeStreamOperators>(); qRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); registerMetaValueType(); } } // ns diff --git a/src/blackmisc/input/registermetadatainput.cpp b/src/blackmisc/input/registermetadatainput.cpp index f8e701e96..32182b3fb 100644 --- a/src/blackmisc/input/registermetadatainput.cpp +++ b/src/blackmisc/input/registermetadatainput.cpp @@ -23,7 +23,6 @@ namespace BlackMisc::Input CKeyboardKey::registerMetadata(); CKeyboardKeyList::registerMetadata(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); } } // ns diff --git a/src/blackmisc/json.h b/src/blackmisc/json.h index c497834c9..cc1c896c5 100644 --- a/src/blackmisc/json.h +++ b/src/blackmisc/json.h @@ -25,7 +25,6 @@ class QDateTime; class QPixmap; -class QStringList; /*! * \defgroup JSON Streaming operators for JSON diff --git a/src/blackmisc/logcategorylist.cpp b/src/blackmisc/logcategorylist.cpp index 8bf8dad9c..f37fe7ebb 100644 --- a/src/blackmisc/logcategorylist.cpp +++ b/src/blackmisc/logcategorylist.cpp @@ -64,7 +64,6 @@ namespace BlackMisc { qRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); registerMetaValueType(); } } diff --git a/src/blackmisc/loghandler.cpp b/src/blackmisc/loghandler.cpp index ca00905f0..0a54fbcde 100644 --- a/src/blackmisc/loghandler.cpp +++ b/src/blackmisc/loghandler.cpp @@ -54,7 +54,7 @@ namespace BlackMisc struct EventFilter : public QAbstractNativeEventFilter { // Prevent Qt from handling Windows Messages while the messagebox is open - virtual bool nativeEventFilter(const QByteArray &, void *message, long *result) override + virtual bool nativeEventFilter(const QByteArray &, void *message, qintptr *result) override { auto msg = static_cast(message); *result = DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam); diff --git a/src/blackmisc/metaclass.h b/src/blackmisc/metaclass.h index d5f663763..30ff51adf 100644 --- a/src/blackmisc/metaclass.h +++ b/src/blackmisc/metaclass.h @@ -87,10 +87,10 @@ // *INDENT-ON* //! std::string qHash -inline uint qHash(const std::string &key, uint seed) { return qHash(QString::fromStdString(key), seed); } +inline size_t qHash(const std::string &key, uint seed) { return qHash(QString::fromStdString(key), seed); } //! std::string qHash -inline uint qHash(const std::string &key) { return qHash(QString::fromStdString(key)); } +inline size_t qHash(const std::string &key) { return qHash(QString::fromStdString(key)); } namespace BlackMisc { diff --git a/src/blackmisc/mixin/mixinhash.h b/src/blackmisc/mixin/mixinhash.h index fabdd197a..35c6c0850 100644 --- a/src/blackmisc/mixin/mixinhash.h +++ b/src/blackmisc/mixin/mixinhash.h @@ -46,27 +46,27 @@ namespace BlackMisc { public: //! qHash overload, needed for storing value in a QSet. - friend uint qHash(const Derived &value, uint seed = 0) // clazy:exclude=qhash-namespace + friend size_t qHash(const Derived &value, size_t seed = 0) // clazy:exclude=qhash-namespace { return ::qHash(hashImpl(value), seed); } private: - static uint hashImpl(const Derived &value); + static size_t hashImpl(const Derived &value); template - static uint baseHash(const T *base) + static size_t baseHash(const T *base) { return qHash(*base); } - static uint baseHash(const void *); - static uint baseHash(const CEmpty *); + static size_t baseHash(const void *); + static size_t baseHash(const CEmpty *); }; template - uint HashByMetaClass::hashImpl(const Derived &value) + size_t HashByMetaClass::hashImpl(const Derived &value) { - uint hash = baseHash(static_cast *>(&value)); + size_t hash = baseHash(static_cast *>(&value)); introspect().forEachMember([&](auto member) { if constexpr (!decltype(member)::has(MetaFlags())) { @@ -77,13 +77,13 @@ namespace BlackMisc } template - uint HashByMetaClass::baseHash(const void *) + size_t HashByMetaClass::baseHash(const void *) { return 0; } template - uint HashByMetaClass::baseHash(const CEmpty *) + size_t HashByMetaClass::baseHash(const CEmpty *) { return 0; } diff --git a/src/blackmisc/network/registermetadatanetwork.cpp b/src/blackmisc/network/registermetadatanetwork.cpp index cabf52a9c..6ac96fc1b 100644 --- a/src/blackmisc/network/registermetadatanetwork.cpp +++ b/src/blackmisc/network/registermetadatanetwork.cpp @@ -41,9 +41,7 @@ namespace BlackMisc CConnectionStatus::registerMetadata(); CClient::registerMetadata(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); CClientList::registerMetadata(); CEcosystem::registerMetadata(); CEcosystemList::registerMetadata(); diff --git a/src/blackmisc/network/user.cpp b/src/blackmisc/network/user.cpp index 295710792..6dc625463 100644 --- a/src/blackmisc/network/user.cpp +++ b/src/blackmisc/network/user.cpp @@ -124,7 +124,7 @@ namespace BlackMisc::Network { const int pos = match.capturedStart(0); const QString icao = match.captured(0).trimmed().right(4); - rn = rn.leftRef(pos).trimmed().toString(); + rn = QStringView { rn }.left(pos).trimmed().toString(); this->setHomeBase(CAirportIcaoCode(icao)); } } diff --git a/src/blackmisc/platformset.cpp b/src/blackmisc/platformset.cpp index 2939266e5..b28cab060 100644 --- a/src/blackmisc/platformset.cpp +++ b/src/blackmisc/platformset.cpp @@ -65,13 +65,10 @@ namespace BlackMisc { qRegisterMetaType>(); qDBusRegisterMetaType>(); - qRegisterMetaTypeStreamOperators>(); qRegisterMetaType>(); qDBusRegisterMetaType>(); - qRegisterMetaTypeStreamOperators>(); qRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); registerMetaValueType(); } } // namespace diff --git a/src/blackmisc/pq/angle.cpp b/src/blackmisc/pq/angle.cpp index 21c6a9468..39179cc77 100644 --- a/src/blackmisc/pq/angle.cpp +++ b/src/blackmisc/pq/angle.cpp @@ -65,10 +65,10 @@ namespace BlackMisc::PhysicalQuantities } QString str = QStringLiteral("%1").arg(dms, 14, 'f', 10, '0'); // 000.0000000000 - values.deg = str.midRef(0, 3).toInt(); - values.min = str.midRef(4, 2).toInt(); - values.sec = str.midRef(6, 2).toInt(); - values.fractionalSec = str.midRef(8, 6).toInt() / 1000000.0; + values.deg = QStringView { str }.mid(0, 3).toInt(); + values.min = QStringView { str }.mid(4, 2).toInt(); + values.sec = QStringView { str }.mid(6, 2).toInt(); + values.fractionalSec = QStringView { str }.mid(8, 6).toInt() / 1000000.0; return values; } diff --git a/src/blackmisc/pq/measurementunit.h b/src/blackmisc/pq/measurementunit.h index 6cb441d60..4716d7fa9 100644 --- a/src/blackmisc/pq/measurementunit.h +++ b/src/blackmisc/pq/measurementunit.h @@ -291,7 +291,7 @@ namespace BlackMisc::PhysicalQuantities } //! \copydoc CValueObject::qHash - friend uint qHash(const CMeasurementUnit &unit) + friend size_t qHash(const CMeasurementUnit &unit) { return ::qHash(unit.getName()); } diff --git a/src/blackmisc/pq/physicalquantity.cpp b/src/blackmisc/pq/physicalquantity.cpp index 0ca497eda..c8c92b745 100644 --- a/src/blackmisc/pq/physicalquantity.cpp +++ b/src/blackmisc/pq/physicalquantity.cpp @@ -423,7 +423,7 @@ namespace BlackMisc::PhysicalQuantities } template - uint CPhysicalQuantity::getValueHash() const + size_t CPhysicalQuantity::getValueHash() const { // there is no double qHash // also unit and rounding has to be considered diff --git a/src/blackmisc/pq/physicalquantity.h b/src/blackmisc/pq/physicalquantity.h index a784565e5..222f09540 100644 --- a/src/blackmisc/pq/physicalquantity.h +++ b/src/blackmisc/pq/physicalquantity.h @@ -301,10 +301,10 @@ namespace BlackMisc::PhysicalQuantities void unmarshalFromDataStream(QDataStream &stream); //! \copydoc BlackMisc::Mixin::HashByMetaClass::qHash - uint getValueHash() const; + size_t getValueHash() const; //! \copydoc CValueObject::qHash - friend uint qHash(const PQ &pq) { return pq.getValueHash(); } // clazy:exclude=qhash-namespace + friend size_t qHash(const PQ &pq) { return pq.getValueHash(); } // clazy:exclude=qhash-namespace //! \copydoc BlackMisc::Mixin::JsonByMetaClass::toJson QJsonObject toJson() const; diff --git a/src/blackmisc/pq/time.cpp b/src/blackmisc/pq/time.cpp index f3c666ebf..7cc53949a 100644 --- a/src/blackmisc/pq/time.cpp +++ b/src/blackmisc/pq/time.cpp @@ -60,10 +60,10 @@ namespace BlackMisc::PhysicalQuantities if (ts.contains(":") && (ts.length() == 8 || ts.length() == 5)) { - const int hour = ts.midRef(0, 2).toInt(); - const int minute = ts.midRef(3, 2).toInt(); + const int hour = QStringView { ts }.mid(0, 2).toInt(); + const int minute = QStringView { ts }.mid(3, 2).toInt(); int second = 0; - if (ts.length() == 8) second = ts.midRef(6, 2).toInt(); + if (ts.length() == 8) second = QStringView { ts }.mid(6, 2).toInt(); (*this) = CTime(hour, minute, second); // fix sign if required diff --git a/src/blackmisc/propertyindex.cpp b/src/blackmisc/propertyindex.cpp index db4b8dc99..1316e1d8f 100644 --- a/src/blackmisc/propertyindex.cpp +++ b/src/blackmisc/propertyindex.cpp @@ -16,10 +16,7 @@ namespace BlackMisc CPropertyIndex::CPropertyIndex(std::initializer_list il) : m_indexes(il) {} - CPropertyIndex::CPropertyIndex(const QVector &indexes) : m_indexes(indexes) - {} - - CPropertyIndex::CPropertyIndex(const QList &indexes) : m_indexes(indexes.toVector()) + CPropertyIndex::CPropertyIndex(const QList &indexes) : m_indexes(indexes) {} CPropertyIndex::CPropertyIndex(const QString &indexes) @@ -73,7 +70,7 @@ namespace BlackMisc { m_indexes.clear(); if (indexes.isEmpty()) { return; } - for (const QStringRef &index : indexes.splitRef(';')) + for (const auto &index : QStringView { indexes }.split(';')) { if (index.isEmpty()) { continue; } bool ok; @@ -98,14 +95,9 @@ namespace BlackMisc this->parseFromString(value.toString()); } - QVector CPropertyIndex::indexVector() const - { - return m_indexes; - } - QList CPropertyIndex::indexList() const { - return m_indexes.toList(); + return m_indexes; } void CPropertyIndex::prepend(int newLeftIndex) diff --git a/src/blackmisc/propertyindex.h b/src/blackmisc/propertyindex.h index d4a222d3d..03d586312 100644 --- a/src/blackmisc/propertyindex.h +++ b/src/blackmisc/propertyindex.h @@ -54,9 +54,6 @@ namespace BlackMisc //! Initializer list constructor CPropertyIndex(std::initializer_list il); - //! Construct from a vector of indexes. - CPropertyIndex(const QVector &indexes); - //! Construct from a list of indexes. CPropertyIndex(const QList &indexes); @@ -78,9 +75,6 @@ namespace BlackMisc //! Empty? bool isEmpty() const; - //! Index vector - QVector indexVector() const; - //! Index list QList indexList() const; @@ -162,7 +156,7 @@ namespace BlackMisc void parseFromString(const QString &indexes); private: - QVector m_indexes; + QList m_indexes; BLACK_METACLASS( CPropertyIndex, diff --git a/src/blackmisc/propertyindexvariantmap.cpp b/src/blackmisc/propertyindexvariantmap.cpp index 152971cf8..788fc3e0f 100644 --- a/src/blackmisc/propertyindexvariantmap.cpp +++ b/src/blackmisc/propertyindexvariantmap.cpp @@ -140,7 +140,7 @@ namespace BlackMisc return m_values.size(); } - uint CPropertyIndexVariantMap::getValueHash() const + size_t CPropertyIndexVariantMap::getValueHash() const { // there is no hash for map, so I use this workaround here return qHash(this->toQString(false)); diff --git a/src/blackmisc/propertyindexvariantmap.h b/src/blackmisc/propertyindexvariantmap.h index 9a2ae7ed0..b6b1bc405 100644 --- a/src/blackmisc/propertyindexvariantmap.h +++ b/src/blackmisc/propertyindexvariantmap.h @@ -117,10 +117,10 @@ namespace BlackMisc const QMap &map() const { return m_values; } //! Hash value - uint getValueHash() const; + size_t getValueHash() const; //! \copydoc CValueObject::qHash - friend uint qHash(const CPropertyIndexVariantMap &vm) { return vm.getValueHash(); } + friend size_t qHash(const CPropertyIndexVariantMap &vm) { return vm.getValueHash(); } //! \copydoc BlackMisc::Mixin::String::toQString QString convertToQString(bool i18n = false) const; diff --git a/src/blackmisc/registermetadata.cpp b/src/blackmisc/registermetadata.cpp index b3551637a..5182fc9e7 100644 --- a/src/blackmisc/registermetadata.cpp +++ b/src/blackmisc/registermetadata.cpp @@ -96,7 +96,6 @@ namespace BlackMisc // needed by xswiftbus proxy class qDBusRegisterMetaType>(); - qRegisterMetaTypeStreamOperators>(); } } // ns diff --git a/src/blackmisc/sequence.h b/src/blackmisc/sequence.h index b41967e91..39b480e0e 100644 --- a/src/blackmisc/sequence.h +++ b/src/blackmisc/sequence.h @@ -125,14 +125,11 @@ namespace BlackMisc //! Initializer list constructor. CSequence(std::initializer_list il) : m_impl(il) {} - //! By QVector of type T. - CSequence(const QVector &vector) : m_impl(vector) {} - - //! By QVector of type T. - CSequence(QVector &&vector) : m_impl(std::move(vector)) {} + //! By QList of type T. + CSequence(QList &&list) : m_impl(std::move(list)) {} //! By QList of type T. - CSequence(const QList &list) : m_impl(list.toVector()) {} + CSequence(const QList &list) : m_impl(list) {} //! Range constructor. template @@ -702,7 +699,7 @@ namespace BlackMisc void unmarshalFromDataStream(QDataStream &stream) { stream >> m_impl; } private: - QVector m_impl; + QList m_impl; }; } // namespace BlackMisc diff --git a/src/blackmisc/setbuilder.h b/src/blackmisc/setbuilder.h index ae104cdca..4a3a86995 100644 --- a/src/blackmisc/setbuilder.h +++ b/src/blackmisc/setbuilder.h @@ -42,8 +42,6 @@ namespace BlackMisc operator QSet() && { return convertTo(sortAndDeduplicate(std::move(m_list))); } operator std::set() const & { return convertTo(sortAndDeduplicate(m_list)); } operator std::set() && { return convertTo(sortAndDeduplicate(std::move(m_list))); } - operator QVector() const & { return convertTo(sortAndDeduplicate(m_list)); } - operator QVector() && { return convertTo(sortAndDeduplicate(std::move(m_list))); } operator std::vector() const & { return convertTo(sortAndDeduplicate(m_list)); } operator std::vector() && { return convertTo(sortAndDeduplicate(std::move(m_list))); } template >> diff --git a/src/blackmisc/sharedstate/activeobserver.cpp b/src/blackmisc/sharedstate/activeobserver.cpp index 513222bb1..99e56308a 100644 --- a/src/blackmisc/sharedstate/activeobserver.cpp +++ b/src/blackmisc/sharedstate/activeobserver.cpp @@ -18,9 +18,9 @@ namespace BlackMisc::SharedState { CPromise promise; emit requestPosted(param, promise); - doAfter(promise.future(), this, [callback = std::move(callback), weakRef = weakRef()](const CVariant &reply) { + doAfter(promise.future(), this, [callback = std::move(callback), weakRef = weakRef()](const QFuture &reply) { const auto lock = weakRef.lock(); - if (lock) { callback(reply); } + if (lock) { callback(reply.result()); } }); } } diff --git a/src/blackmisc/sharedstate/dbus/duplex.cpp b/src/blackmisc/sharedstate/dbus/duplex.cpp index 4813cd7c6..5d8282d76 100644 --- a/src/blackmisc/sharedstate/dbus/duplex.cpp +++ b/src/blackmisc/sharedstate/dbus/duplex.cpp @@ -29,7 +29,7 @@ namespace BlackMisc::SharedState::DBus { const auto token = getToken(); auto future = m_receivedRequests.insert(token, {})->future(); - emit requestReceived(channel, param, token, {}); + emit requestReceived(channel, param, token, QPrivateSignal {}); return future; } diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp index 259a2d558..7f395c5ca 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp @@ -430,13 +430,13 @@ namespace BlackMisc::Simulation::FsCommon // Remove inline comments starting with ; const int indexComment = line.indexOf(';'); - QString content = line.leftRef(indexComment - 1).trimmed().toString(); + QString content = QStringView { line }.left(indexComment - 1).trimmed().toString(); const int index = line.indexOf('='); if (index < 0) { return {}; } if (line.length() < index + 1) { return {}; } - content = content.midRef(index + 1).trimmed().toString(); + content = QStringView { content }.mid(index + 1).trimmed().toString(); // fix "" strings, some are malformed and just contain " at beginning, not at the end if (hasBalancedQuotes(content, '"')) diff --git a/src/blackmisc/simulation/fscommon/fsdirectories.cpp b/src/blackmisc/simulation/fscommon/fsdirectories.cpp index b1ad3c67e..c012c61b6 100644 --- a/src/blackmisc/simulation/fscommon/fsdirectories.cpp +++ b/src/blackmisc/simulation/fscommon/fsdirectories.cpp @@ -457,7 +457,7 @@ namespace BlackMisc::Simulation::FsCommon if (!correctPath) { continue; } // absolute or relative path - const QString fp = pathValue.leftRef(3).contains(':') ? + const QString fp = QStringView { pathValue }.left(3).contains(':') ? pathValue : CFileUtils::appendFilePaths(addOnPath, pathValue); if (CFsDirectories::logConfigPathReading()) { CLogMessage(static_cast(nullptr)).info(u"Testing '%1' as addon path: '%2'") << fp << addOnPath; } @@ -542,7 +542,7 @@ namespace BlackMisc::Simulation::FsCommon if (containsAny(soPath, CFsDirectories::fsxSimObjectsExcludeDirectoryPatterns(), Qt::CaseInsensitive)) { continue; } // make absolute - if (!soPath.leftRef(3).contains(':')) { soPath = CFileUtils::appendFilePaths(relPath, soPath); } + if (!QStringView { soPath }.left(3).contains(':')) { soPath = CFileUtils::appendFilePaths(relPath, soPath); } const QDir dir(soPath); // always absolute path now if (checked && !dir.exists()) diff --git a/src/blackmisc/simulation/interpolation/interpolatormulti.h b/src/blackmisc/simulation/interpolation/interpolatormulti.h index 612f5d70f..1115f609a 100644 --- a/src/blackmisc/simulation/interpolation/interpolatormulti.h +++ b/src/blackmisc/simulation/interpolation/interpolatormulti.h @@ -61,7 +61,7 @@ namespace BlackMisc::Simulation CInterpolationLogger *logger = nullptr); //! Has interpolator initialized? - bool hasInterpolator() const { return m_interpolator; } + bool hasInterpolator() const { return !m_interpolator.isNull(); } //! Interpolator CInterpolatorMulti *interpolator() const { return m_interpolator.data(); } diff --git a/src/blackmisc/simulation/registermetadatasimulation.cpp b/src/blackmisc/simulation/registermetadatasimulation.cpp index 8d63441e0..bdebaf1a2 100644 --- a/src/blackmisc/simulation/registermetadatasimulation.cpp +++ b/src/blackmisc/simulation/registermetadatasimulation.cpp @@ -92,16 +92,6 @@ namespace BlackMisc::Simulation qDBusRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); - - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); - qRegisterMetaTypeStreamOperators(); } } // ns diff --git a/src/blackmisc/simulation/simulatorinternals.cpp b/src/blackmisc/simulation/simulatorinternals.cpp index 648fcb21b..4186eb5c6 100644 --- a/src/blackmisc/simulation/simulatorinternals.cpp +++ b/src/blackmisc/simulation/simulatorinternals.cpp @@ -80,7 +80,6 @@ namespace BlackMisc::Simulation { qRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); registerMetaValueType(); } diff --git a/src/blackmisc/statusmessage.cpp b/src/blackmisc/statusmessage.cpp index 3bd4445b4..999d2df24 100644 --- a/src/blackmisc/statusmessage.cpp +++ b/src/blackmisc/statusmessage.cpp @@ -30,7 +30,7 @@ namespace BlackMisc QString &temp = t_tempBuffer.localData(); temp.resize(0); // unlike clear(), resize(0) doesn't release the capacity if there are no implicitly shared copies - quint64 unusedArgs = (1ULL << std::min(63, args.size())) - 1; + quint64 unusedArgs = (1ULL << std::min(qsizetype(63), args.size())) - 1; for (auto it = format.begin();;) { const auto pc = std::find(it, format.end(), u'%'); @@ -321,7 +321,6 @@ namespace BlackMisc CValueObject::registerMetadata(); qRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); } CStatusMessage::StatusSeverity CStatusMessage::stringToSeverity(const QString &severity) diff --git a/src/blackmisc/statusmessage.h b/src/blackmisc/statusmessage.h index cb40c4b9e..24f57cc15 100644 --- a/src/blackmisc/statusmessage.h +++ b/src/blackmisc/statusmessage.h @@ -110,7 +110,7 @@ namespace BlackMisc friend int compare(const CStrongStringView &a, const CStrongStringView &b) { return a.m_view.compare(b.m_view); } //! Hash value. - friend uint qHash(const CStrongStringView &obj, uint seed = 0) { return ::qHash(obj.m_view, seed); } + friend size_t qHash(const CStrongStringView &obj, uint seed = 0) { return ::qHash(obj.m_view, seed); } //! @{ //! DBus marshalling. diff --git a/src/blackmisc/stringutils.cpp b/src/blackmisc/stringutils.cpp index a9737274b..bf22e2e8a 100644 --- a/src/blackmisc/stringutils.cpp +++ b/src/blackmisc/stringutils.cpp @@ -382,9 +382,9 @@ namespace BlackMisc // yyyyMMddHHmmsszzz // 01234567890123456 - int year(dateTimeString.leftRef(4).toInt()); - int month(dateTimeString.midRef(4, 2).toInt()); - int day(dateTimeString.midRef(6, 2).toInt()); + int year(QStringView { dateTimeString }.left(4).toInt()); + int month(QStringView { dateTimeString }.mid(4, 2).toInt()); + int day(QStringView { dateTimeString }.mid(6, 2).toInt()); QDate date; date.setDate(year, month, day); QDateTime dt; @@ -393,10 +393,10 @@ namespace BlackMisc if (dateTimeString.length() < 12) { return dt; } QTime t; - const int hour(dateTimeString.midRef(8, 2).toInt()); - const int minute(dateTimeString.midRef(10, 2).toInt()); - const int second(dateTimeString.length() < 14 ? 0 : dateTimeString.midRef(12, 2).toInt()); - const int ms(dateTimeString.length() < 17 ? 0 : dateTimeString.rightRef(3).toInt()); + const int hour(QStringView { dateTimeString }.mid(8, 2).toInt()); + const int minute(QStringView { dateTimeString }.mid(10, 2).toInt()); + const int second(dateTimeString.length() < 14 ? 0 : QStringView { dateTimeString }.mid(12, 2).toInt()); + const int ms(dateTimeString.length() < 17 ? 0 : QStringView { dateTimeString }.right(3).toInt()); t.setHMS(hour, minute, second, ms); dt.setTime(t); diff --git a/src/blackmisc/valuecache.cpp b/src/blackmisc/valuecache.cpp index 480ce4a09..2475ae0fd 100644 --- a/src/blackmisc/valuecache.cpp +++ b/src/blackmisc/valuecache.cpp @@ -140,7 +140,6 @@ namespace BlackMisc { MetaType::registerMetadata(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); } //////////////////////////////// diff --git a/src/blackmisc/variant.cpp b/src/blackmisc/variant.cpp index 68ab3cbf4..6bda020dd 100644 --- a/src/blackmisc/variant.cpp +++ b/src/blackmisc/variant.cpp @@ -21,6 +21,7 @@ #include #include #include +#include namespace BlackMisc { @@ -29,7 +30,7 @@ namespace BlackMisc Private::IValueObjectMetaInfo *Private::getValueObjectMetaInfo(int typeId) { - return getValueObjectMetaInfo(QVariant(typeId, nullptr)); + return getValueObjectMetaInfo(QVariant(QMetaType(typeId), nullptr)); } Private::IValueObjectMetaInfo *Private::getValueObjectMetaInfo(const QVariant &v) @@ -49,7 +50,7 @@ namespace BlackMisc } if (userType() == qMetaTypeId_CVariantList) { - return QVariant::fromValue(QVector()).canConvert(typeId) || QVariant(typeId, nullptr).canConvert(); + return QVariant::fromValue(QVector()).canConvert(typeId) || QVariant(QMetaType(typeId), nullptr).canConvert(); } return false; } @@ -167,9 +168,10 @@ namespace BlackMisc return 0; } } - if (a.m_v < b.m_v) { return -1; } - if (a.m_v > b.m_v) { return 1; } - return 0; + const QPartialOrdering order = QVariant::compare(a.m_v, b.m_v); + if (order == QPartialOrdering::Less) { return -1; } + if (order == QPartialOrdering::Greater) { return 1; } + return 0; // for "Equivalent" and "Unordered" } QJsonObject CVariant::toJson() const @@ -264,12 +266,12 @@ namespace BlackMisc { CJsonScope scope("value"); // tracker Q_UNUSED(scope); - m_v = QVariant(typeId, nullptr); + m_v = QVariant(QMetaType(typeId), nullptr); // this will call convertFromJson if there is no MemoizedJson meta->convertFromMemoizedJson(value.toObject(), data(), true); } - else if (QMetaType::hasRegisteredConverterFunction(qMetaTypeId(), typeId)) + else if (QMetaType::hasRegisteredConverterFunction(QMetaType(qMetaTypeId()), QMetaType(typeId))) { m_v.setValue(value.toString()); if (!m_v.convert(typeId)) @@ -347,7 +349,7 @@ namespace BlackMisc if (value.isUndefined()) { throw CJsonException("Missing 'value'"); } CJsonScope scope("value"); - m_v = QVariant(typeId, nullptr); + m_v = QVariant(QMetaType(typeId), nullptr); meta->convertFromMemoizedJson(value.toObject(), data(), allowFallbackToJson); } catch (const Private::CVariantException &ex) @@ -374,7 +376,7 @@ namespace BlackMisc return {}; } - uint CVariant::getValueHash() const + size_t CVariant::getValueHash() const { switch (m_v.type()) { @@ -607,7 +609,7 @@ namespace BlackMisc } else { - QVariant valueVariant(localUserType, nullptr); + QVariant valueVariant(QMetaType(localUserType), nullptr); auto *meta = Private::getValueObjectMetaInfo(valueVariant); if (meta) { diff --git a/src/blackmisc/variant.h b/src/blackmisc/variant.h index e7d9770eb..20718cd40 100644 --- a/src/blackmisc/variant.h +++ b/src/blackmisc/variant.h @@ -95,10 +95,10 @@ namespace BlackMisc CVariant(const char *string) : m_v(string) {} //! Construct a variant from the given type and opaque pointer. - CVariant(int typeId, const void *copy) : m_v(typeId, copy) {} + CVariant(int typeId, const void *copy) : m_v(QMetaType(typeId), copy) {} //! \copydoc CValueObject::qHash - friend uint qHash(const CVariant &var) { return var.getValueHash(); } + friend size_t qHash(const CVariant &var) { return var.getValueHash(); } //! Change the internal QVariant. void reset(const QVariant &var) { m_v = var; } @@ -335,7 +335,7 @@ namespace BlackMisc const void *data() const { return m_v.data(); } static int compareImpl(const CVariant &, const CVariant &); - uint getValueHash() const; + size_t getValueHash() const; template T to(tag) const @@ -350,11 +350,6 @@ namespace BlackMisc return toImpl>(); } template - QVector to(tag>) const - { - return toImpl>(); - } - template CSequence to(tag>) const { return toImpl>(); @@ -388,7 +383,7 @@ namespace BlackMisc::Private { if constexpr (canConvertVariantList(0)) { - if (QMetaType::hasRegisteredConverterFunction(qMetaTypeId(), qMetaTypeId>())) { return; } + if (QMetaType::hasRegisteredConverterFunction(QMetaType(qMetaTypeId()), QMetaType(qMetaTypeId>()))) { return; } QMetaType::registerConverter>([](const T &list) -> QVector { return list.transform([](const typename T::value_type &v) { return CVariant::from(v); }); diff --git a/src/blackmisc/variantprivate.h b/src/blackmisc/variantprivate.h index 1ed1110bd..fa84c1d5e 100644 --- a/src/blackmisc/variantprivate.h +++ b/src/blackmisc/variantprivate.h @@ -41,7 +41,7 @@ namespace BlackMisc virtual QJsonObject toMemoizedJson(const void *object) const = 0; virtual void convertFromMemoizedJson(const QJsonObject &json, void *object, bool allowFallbackToJson) const = 0; virtual void unmarshall(const QDBusArgument &arg, void *object) const = 0; - virtual uint getValueHash(const void *object) const = 0; + virtual size_t getValueHash(const void *object) const = 0; virtual int getMetaTypeId() const = 0; virtual const void *upCastTo(const void *object, int metaTypeId) const = 0; virtual int compareImpl(const void *lhs, const void *rhs) const = 0; @@ -124,12 +124,12 @@ namespace BlackMisc } template - static uint getValueHash(const T &object, decltype(static_cast(qHash(object)), 0)) + static size_t getValueHash(const T &object, decltype(static_cast(qHash(object)), 0)) { return qHash(object); } template - static uint getValueHash(const T &object, ...) + static size_t getValueHash(const T &object, ...) { throw CVariantException(object, "getValueHash"); } @@ -218,7 +218,7 @@ namespace BlackMisc virtual QJsonObject toMemoizedJson(const void *object) const override; virtual void convertFromMemoizedJson(const QJsonObject &json, void *object, bool allowFallbackToJson) const override; virtual void unmarshall(const QDBusArgument &arg, void *object) const override; - virtual uint getValueHash(const void *object) const override; + virtual size_t getValueHash(const void *object) const override; virtual int getMetaTypeId() const override; virtual const void *upCastTo(const void *object, int metaTypeId) const override; virtual int compareImpl(const void *lhs, const void *rhs) const override; @@ -275,7 +275,7 @@ namespace BlackMisc arg >> cast(object); } template - uint CValueObjectMetaInfo::getValueHash(const void *object) const + size_t CValueObjectMetaInfo::getValueHash(const void *object) const { return CValueObjectMetaInfoHelper::getValueHash(cast(object), 0); } @@ -384,7 +384,6 @@ namespace BlackMisc { qRegisterMetaType(); qDBusRegisterMetaType(); - qRegisterMetaTypeStreamOperators(); registerMetaValueType(); maybeRegisterMetaList(); } diff --git a/src/blackmisc/worker.cpp b/src/blackmisc/worker.cpp index 58a173202..e5c67b6ea 100644 --- a/src/blackmisc/worker.cpp +++ b/src/blackmisc/worker.cpp @@ -68,7 +68,7 @@ namespace BlackMisc worker->setStarted(); auto *thread = new CRegularThread(owner); - if (typeId != QMetaType::Void) { worker->m_result = QVariant(typeId, nullptr); } + if (typeId != QMetaType::Void) { worker->m_result = QVariant(QMetaType(typeId), nullptr); } const QString ownerName = owner->objectName().isEmpty() ? owner->metaObject()->className() : owner->objectName(); thread->setObjectName(ownerName + ":" + name); diff --git a/src/blacksound/audioutilities.cpp b/src/blacksound/audioutilities.cpp index 5b316c57e..68d59c9fa 100644 --- a/src/blacksound/audioutilities.cpp +++ b/src/blacksound/audioutilities.cpp @@ -7,7 +7,9 @@ #include #include -#include +#include +#include +#include using namespace BlackConfig; using namespace BlackMisc::Audio; @@ -73,67 +75,52 @@ namespace BlackSound return output; } - QAudioDeviceInfo getLowestLatencyDevice(const CAudioDeviceInfo &device, QAudioFormat &format) + QAudioDevice getLowestLatencyDevice(const CAudioDeviceInfo &device, QAudioFormat &format) { if (device.isDefault() || !device.isValid()) { - const QAudioDeviceInfo defDevice = device.isInputDevice() ? QAudioDeviceInfo::defaultInputDevice() : QAudioDeviceInfo::defaultOutputDevice(); - if (!defDevice.isFormatSupported(format)) - { - format = defDevice.nearestFormat(format); - } + const QAudioDevice defDevice = device.isInputDevice() ? QMediaDevices::defaultAudioInput() : QMediaDevices::defaultAudioOutput(); + Q_ASSERT_X(defDevice.isFormatSupported(format), Q_FUNC_INFO, "Device does not support format"); return defDevice; } - const QList allQtDevices = + const QList allQtDevices = device.isInputDevice() ? CAudioDeviceInfoList::allQtInputDevices() : CAudioDeviceInfoList::allQtOutputDevices(); // Find the one with lowest latency. - QList supportedDevices; - for (const QAudioDeviceInfo &d : allQtDevices) + QList supportedDevices; + for (const QAudioDevice &d : allQtDevices) { - if (d.deviceName() == device.getName()) + if (d.description() == device.getName() && d.isFormatSupported(format)) { - if (!d.isFormatSupported(format)) - { - // Check whether the nearest format is acceptable for our needs - const QAudioFormat nearestFormat = d.nearestFormat(format); - if (nearestFormat.sampleRate() != format.sampleRate() || - nearestFormat.sampleSize() != format.sampleSize() || - nearestFormat.sampleType() != format.sampleType() || - nearestFormat.byteOrder() != format.byteOrder() || - nearestFormat.codec() != format.codec()) - { - continue; - } - } supportedDevices.push_back(d); } } if (supportedDevices.isEmpty()) { return {}; } - QAudioDeviceInfo deviceWithLowestLatency = supportedDevices.at(0); + QAudioDevice deviceWithLowestLatency = supportedDevices.at(0); + deviceWithLowestLatency = device.isInputDevice() ? QMediaDevices::defaultAudioInput() : QMediaDevices::defaultAudioOutput(); if (supportedDevices.size() > 1) { - QAudioFormat nearestFormat = format; int lowestBufferSize = std::numeric_limits::max(); - for (const QAudioDeviceInfo &d : supportedDevices) + for (const QAudioDevice &d : supportedDevices) { + if (!d.isFormatSupported(format)) continue; int bufferSize = 0; if (device.getType() == CAudioDeviceInfo::InputDevice) { - QAudioInput input(d, d.nearestFormat(format)); + QAudioSource input(d, format); input.start(); input.stop(); bufferSize = input.bufferSize(); } else { - QAudioOutput output(d, d.nearestFormat(format)); + QAudioSink output(d, format); output.start(); output.stop(); bufferSize = output.bufferSize(); @@ -142,24 +129,22 @@ namespace BlackSound if (bufferSize < lowestBufferSize) { deviceWithLowestLatency = d; - nearestFormat = d.nearestFormat(format); lowestBufferSize = bufferSize; } } - format = nearestFormat; } return deviceWithLowestLatency; } - QAudioDeviceInfo getHighestCompatibleOutputDevice(const CAudioDeviceInfo &device, QAudioFormat &format) + QAudioDevice getHighestCompatibleOutputDevice(const CAudioDeviceInfo &device, QAudioFormat &format) { if (device.isDefault()) { return CAudioDeviceInfoList::defaultQtOutputDevice(); } - const QList allQtDevices = CAudioDeviceInfoList::allQtOutputDevices(); + const QList allQtDevices = CAudioDeviceInfoList::allQtOutputDevices(); - QList supportedDevices; - for (const QAudioDeviceInfo &d : allQtDevices) + QList supportedDevices; + for (const QAudioDevice &d : allQtDevices) { - if (d.deviceName() == device.getName()) + if (d.description() == device.getName()) { // exact match, format supported if (d.isFormatSupported(format)) { return d; } @@ -171,53 +156,47 @@ namespace BlackSound if (supportedDevices.isEmpty()) { format = QAudioFormat(); - return QAudioDeviceInfo(); + return {}; } // here we could "search the best device", currently only first is taken - QAudioDeviceInfo usedDevice = supportedDevices.front(); - if (!usedDevice.isFormatSupported(format)) - { - format = usedDevice.nearestFormat(format); - } + QAudioDevice usedDevice = supportedDevices.front(); + Q_ASSERT_X(usedDevice.isFormatSupported(format), Q_FUNC_INFO, "Device does not support format"); return usedDevice; } QString toQString(const QAudioFormat &format) { - return QStringLiteral("Sample rate: %1 channels: %2 sample size: %3 codec: %4 order: %5 type: %6 bytes/frame: %7") + return QStringLiteral("Sample rate: %1 channels: %2 sample format: %3 bytes/frame: %4") .arg(format.sampleRate()) .arg(format.channelCount()) - .arg(format.sampleSize()) - .arg(format.codec()) - .arg(toQString(format.byteOrder())) - .arg(toQString(format.sampleType())) + .arg(format.sampleFormat()) .arg(format.bytesPerFrame()); } - const QString &toQString(QAudioFormat::Endian s) + const QString &toQString(QSysInfo::Endian s) { static const QString l("little"); static const QString b("big"); switch (s) { - case QAudioFormat::BigEndian: return b; - case QAudioFormat::LittleEndian: return l; + case QSysInfo::BigEndian: return b; + case QSysInfo::LittleEndian: return l; default: break; } static const QString u("??"); return u; } - const QString &toQString(QAudioFormat::SampleType e) + const QString &toQString(QAudioFormat::SampleFormat e) { - static const QString s("signed int"); - static const QString u("unsigned int"); + static const QString s("signed int 16"); + static const QString u("unsigned int 8"); static const QString f("float"); switch (e) { - case QAudioFormat::SignedInt: return s; - case QAudioFormat::UnSignedInt: return u; + case QAudioFormat::Int16: return s; + case QAudioFormat::UInt8: return u; case QAudioFormat::Float: return f; case QAudioFormat::Unknown: default: break; @@ -240,7 +219,7 @@ namespace BlackSound void occupyAudioInputDevice() { if (!CBuildConfig::isRunningOnWindows10()) { return; } - static const QAudioInput input(QAudioDeviceInfo::defaultInputDevice()); + static const QAudioInput input(QMediaDevices::defaultAudioInput()); } } // ns diff --git a/src/blacksound/audioutilities.h b/src/blacksound/audioutilities.h index 619c82118..77e3eead7 100644 --- a/src/blacksound/audioutilities.h +++ b/src/blacksound/audioutilities.h @@ -9,7 +9,7 @@ #include "blacksound/blacksoundexport.h" #include "blackmisc/audio/audiodeviceinfo.h" -#include +#include #include #include @@ -23,12 +23,12 @@ namespace BlackSound BLACKSOUND_EXPORT QVector convertFromStereoToMono(const QVector &stereo); BLACKSOUND_EXPORT QVector convertFromShortToFloat(const QVector &input); - BLACKSOUND_EXPORT QAudioDeviceInfo getLowestLatencyDevice(const BlackMisc::Audio::CAudioDeviceInfo &device, QAudioFormat &format); - BLACKSOUND_EXPORT QAudioDeviceInfo getHighestCompatibleOutputDevice(const BlackMisc::Audio::CAudioDeviceInfo &device, QAudioFormat &format); + BLACKSOUND_EXPORT QAudioDevice getLowestLatencyDevice(const BlackMisc::Audio::CAudioDeviceInfo &device, QAudioFormat &format); + BLACKSOUND_EXPORT QAudioDevice getHighestCompatibleOutputDevice(const BlackMisc::Audio::CAudioDeviceInfo &device, QAudioFormat &format); BLACKSOUND_EXPORT QString toQString(const QAudioFormat &format); - BLACKSOUND_EXPORT const QString &toQString(QAudioFormat::Endian e); - BLACKSOUND_EXPORT const QString &toQString(QAudioFormat::SampleType s); + BLACKSOUND_EXPORT const QString &toQString(QSysInfo::Endian e); + BLACKSOUND_EXPORT const QString &toQString(QAudioFormat::SampleFormat s); //! @} //! @{ diff --git a/src/blacksound/notificationplayer.cpp b/src/blacksound/notificationplayer.cpp index 77d6e07de..fa2b85205 100644 --- a/src/blacksound/notificationplayer.cpp +++ b/src/blacksound/notificationplayer.cpp @@ -6,7 +6,6 @@ #include "blackmisc/swiftdirectories.h" #include "blacksound/sampleprovider/samples.h" #include -#include using namespace BlackMisc; using namespace BlackMisc::Audio; @@ -32,12 +31,6 @@ namespace BlackSound effect->setVolume(v); // 0..1 effect->play(); - /** for testing - QString fn = effect->source().toLocalFile(); - QSound s(fn); - s.play(); - **/ - // used for too long or hanging sounds QPointer myself(this); QTimer::singleShot(3000, effect, [=] { diff --git a/src/blacksound/sampleprovider/resourcesound.cpp b/src/blacksound/sampleprovider/resourcesound.cpp index 3fc1ca344..8d093f9d4 100644 --- a/src/blacksound/sampleprovider/resourcesound.cpp +++ b/src/blacksound/sampleprovider/resourcesound.cpp @@ -32,7 +32,7 @@ namespace BlackSound::SampleProvider m_data->samples.clear(); if (wavFile.open(m_data->fileName)) { - if (wavFile.fileFormat().sampleType() == QAudioFormat::Float) + if (wavFile.fileFormat().sampleFormat() == QAudioFormat::Float) { // Not implemented // m_samples = convertFloatBytesTo16BitPCM(wavFile.audioData()); diff --git a/src/blacksound/threadedtonepairplayer.cpp b/src/blacksound/threadedtonepairplayer.cpp index 93a1294d3..a0410d628 100644 --- a/src/blacksound/threadedtonepairplayer.cpp +++ b/src/blacksound/threadedtonepairplayer.cpp @@ -56,16 +56,14 @@ namespace BlackSound QAudioFormat format; format.setSampleRate(44100); format.setChannelCount(1); - format.setSampleSize(16); // 8 or 16 works - format.setCodec("audio/pcm"); - format.setByteOrder(QAudioFormat::LittleEndian); - format.setSampleType(QAudioFormat::SignedInt); + format.setSampleFormat(QAudioFormat::Int16); + static_assert(Q_BYTE_ORDER == Q_LITTLE_ENDIAN); // find best device - const QAudioDeviceInfo selectedDevice = getHighestCompatibleOutputDevice(m_deviceInfo, format); + const QAudioDevice selectedDevice = getHighestCompatibleOutputDevice(m_deviceInfo, format); m_audioFormat = format; - m_audioOutput = new QAudioOutput(selectedDevice, m_audioFormat, this); - connect(m_audioOutput, &QAudioOutput::stateChanged, this, &CThreadedTonePairPlayer::handleStateChanged); + m_audioOutput = new QAudioSink(selectedDevice, m_audioFormat, this); + connect(m_audioOutput, &QAudioSink::stateChanged, this, &CThreadedTonePairPlayer::handleStateChanged); } void CThreadedTonePairPlayer::beforeQuit() noexcept @@ -128,8 +126,8 @@ namespace BlackSound QByteArray CThreadedTonePairPlayer::generateAudioFromTonePairs(const CTonePair &tonePair) { - const int bytesPerSample = m_audioFormat.sampleSize() / 8; - const int bytesForAllChannels = m_audioFormat.channelCount() * bytesPerSample; + const int bytesPerSample = m_audioFormat.bytesPerSample(); + const int bytesForAllChannels = m_audioFormat.bytesPerFrame(); QByteArray bufferData; qint64 bytesPerTonePair = m_audioFormat.sampleRate() * bytesForAllChannels * tonePair.getDurationMs() / 1000; @@ -196,11 +194,14 @@ namespace BlackSound void CThreadedTonePairPlayer::writeAmplitudeToBuffer(double amplitude, unsigned char *bufferPointer) { - Q_ASSERT(this->m_audioFormat.sampleSize() == 16); - Q_ASSERT(this->m_audioFormat.sampleType() == QAudioFormat::SignedInt); - Q_ASSERT(this->m_audioFormat.byteOrder() == QAudioFormat::LittleEndian); - + Q_ASSERT(this->m_audioFormat.sampleFormat() == QAudioFormat::Int16); + static_assert(Q_BYTE_ORDER == Q_LITTLE_ENDIAN); const qint16 value = static_cast(amplitude * 32767); + +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + qToBigEndian(value, bufferPointer); +#else qToLittleEndian(value, bufferPointer); +#endif } } diff --git a/src/blacksound/threadedtonepairplayer.h b/src/blacksound/threadedtonepairplayer.h index c5dbb7973..cb17df4e2 100644 --- a/src/blacksound/threadedtonepairplayer.h +++ b/src/blacksound/threadedtonepairplayer.h @@ -11,12 +11,13 @@ #include "blackmisc/audio/audiodeviceinfo.h" #include "blackmisc/worker.h" -#include +#include #include #include #include #include #include +#include class QTimer; @@ -65,7 +66,7 @@ namespace BlackSound void writeAmplitudeToBuffer(double amplitude, unsigned char *bufferPointer); BlackMisc::Audio::CAudioDeviceInfo m_deviceInfo; - QAudioOutput *m_audioOutput = nullptr; + QAudioSink *m_audioOutput = nullptr; QByteArray m_bufferData; QBuffer m_buffer; QAudioFormat m_audioFormat; diff --git a/src/blacksound/wav/wavfile.cpp b/src/blacksound/wav/wavfile.cpp index 7adb31c84..a8dba5e64 100644 --- a/src/blacksound/wav/wavfile.cpp +++ b/src/blacksound/wav/wavfile.cpp @@ -97,24 +97,28 @@ namespace BlackSound::Wav return false; // Establish format - if (memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0) - m_fileFormat.setByteOrder(QAudioFormat::LittleEndian); - else - m_fileFormat.setByteOrder(QAudioFormat::BigEndian); - int bps = qFromLittleEndian(header.wave.bitsPerSample); m_fileFormat.setChannelCount(qFromLittleEndian(header.wave.numChannels)); - m_fileFormat.setCodec("audio/pcm"); m_fileFormat.setSampleRate(qFromLittleEndian(header.wave.sampleRate)); - m_fileFormat.setSampleSize(qFromLittleEndian(header.wave.bitsPerSample)); if (header.wave.audioFormat == 1 || header.wave.audioFormat == 0) { - m_fileFormat.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt); + if (bps == 8) + { + m_fileFormat.setSampleFormat(QAudioFormat::UInt8); + } + else if (bps == 16) + { + m_fileFormat.setSampleFormat(QAudioFormat::Int16); + } + else + { + m_fileFormat.setSampleFormat(QAudioFormat::Int32); + } } else { - m_fileFormat.setSampleType(QAudioFormat::Float); + m_fileFormat.setSampleFormat(QAudioFormat::Float); } } else diff --git a/src/plugins/simulator/flightgear/simulatorflightgear.cpp b/src/plugins/simulator/flightgear/simulatorflightgear.cpp index d15f81a1f..2271458d8 100644 --- a/src/plugins/simulator/flightgear/simulatorflightgear.cpp +++ b/src/plugins/simulator/flightgear/simulatorflightgear.cpp @@ -906,7 +906,7 @@ namespace BlackSimPlugin::Flightgear CLogMessage(this).warning(u"Adding '%1' failed, but aircraft no longer in range, will be removed") << callsign; } - const bool wasPending = (m_addingInProgressAircraft.remove(cs) > 0); + const bool wasPending = (static_cast(m_addingInProgressAircraft.remove(cs)) > 0); Q_UNUSED(wasPending) if (failedRemoteAircraft.hasCallsign() && !m_aircraftAddedFailed.containsCallsign(cs)) diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index 4eb68998b..20943ab83 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -697,8 +697,8 @@ namespace BlackSimPlugin::XPlane // (e.g. std::lower_bound) using a model path as the search key. struct PrefixComparator { - bool operator()(const Prefix &a, const QString &b) const { return QStringRef(&a.s) < b.leftRef(a.s.size()); } - bool operator()(const QString &a, const Prefix &b) const { return a.leftRef(b.s.size()) < QStringRef(&b.s); } + bool operator()(const Prefix &a, const QString &b) const { return QStringView(a.s) < QStringView(b).left(a.s.size()); } + bool operator()(const QString &a, const Prefix &b) const { return QStringView(a).left(b.s.size()) < QStringView(b.s); } }; // The list of packages discovered so far. @@ -1238,7 +1238,7 @@ namespace BlackSimPlugin::XPlane CLogMessage(this).warning(u"Adding '%1' failed, but aircraft no longer in range, will be removed") << callsign; } - const bool wasPending = (m_addingInProgressAircraft.remove(cs) > 0); + const bool wasPending = (static_cast(m_addingInProgressAircraft.remove(cs)) > 0); Q_UNUSED(wasPending) if (failedRemoteAircraft.hasCallsign() && !m_aircraftAddedFailed.containsCallsign(cs)) diff --git a/tests/blackmisc/testslot/testslot.cpp b/tests/blackmisc/testslot/testslot.cpp index a29a5cad0..6222c4d0f 100644 --- a/tests/blackmisc/testslot/testslot.cpp +++ b/tests/blackmisc/testslot/testslot.cpp @@ -27,7 +27,7 @@ namespace BlackMiscTest void CTestSlot::slotBasics() { QObject *obj = new QObject(this); - CSlot slot1 = { obj, &QObject::setObjectName }; + CSlot slot1 = { obj, [&](const QString &name) { obj->setObjectName(name); } }; QVERIFY2(slot1, "Slot has valid object and function - can be called."); // KB 8/17 T125, CSlot can no longer be constructed with null object diff --git a/tests/blackmisc/testvalueobject.h b/tests/blackmisc/testvalueobject.h index 8a855e50c..9af8764fe 100644 --- a/tests/blackmisc/testvalueobject.h +++ b/tests/blackmisc/testvalueobject.h @@ -123,11 +123,14 @@ namespace BlackMisc int n; bool operator<(const CNotHashable &other) const { return n < other.n; } QString toQString(bool = false) const { return {}; } + bool operator==(const CNotHashable &other) const { return n == other.n; } }; inline QJsonArray &operator<<(QJsonArray &a, const CNotHashable &) { return a; } inline const QJsonValueRef &operator>>(const QJsonValueRef &v, CNotHashable &) { return v; } inline QDBusArgument &operator<<(QDBusArgument &a, const CNotHashable &) { return a; } inline const QDBusArgument &operator>>(const QDBusArgument &a, const CNotHashable &) { return a; } + inline QDataStream &operator<<(QDataStream &a, const CNotHashable &) { return a; } + inline QDataStream &operator>>(QDataStream &a, const CNotHashable &) { return a; } //! \endcond } // namespace diff --git a/third_party/simplecrypt/simplecrypt.cpp b/third_party/simplecrypt/simplecrypt.cpp index c52bf4d3e..379f2f7b1 100644 --- a/third_party/simplecrypt/simplecrypt.cpp +++ b/third_party/simplecrypt/simplecrypt.cpp @@ -29,6 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include // added by swift for Qt 6 compatibility #include #include #include