From 91274c58b1772dfe38d3fcab291693141e822684 Mon Sep 17 00:00:00 2001 From: Daniel <49284193+dnlkrs@users.noreply.github.com> Date: 周五, 06 12月 2024 21:55:30 +0800 Subject: [PATCH] Fix WindowsRegistryKey for Qt 6.8.1 (#154) --- src/core/shared/qwkwindowsextra_p.h | 20 +++++++------------- src/core/qwindowkit_windows.h | 30 ++++++++++++++++++++++++++++++ src/core/qwindowkit_windows.cpp | 6 +++++- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/core/qwindowkit_windows.cpp b/src/core/qwindowkit_windows.cpp index 51a6f33..a9cc371 100644 --- a/src/core/qwindowkit_windows.cpp +++ b/src/core/qwindowkit_windows.cpp @@ -85,6 +85,10 @@ reinterpret_cast<unsigned char *>(&value), &size) == ERROR_SUCCESS; return qMakePair(value, ok); } +#elif QT_VERSION < QT_VERSION_CHECK(6, 8, 1) + WindowsRegistryKey::WindowsRegistryKey(HKEY parentHandle, QStringView subKey, REGSAM permissions, REGSAM access) + : QWinRegistryKey(parentHandle, subKey, permissions, access) + { + } #endif - } \ No newline at end of file diff --git a/src/core/qwindowkit_windows.h b/src/core/qwindowkit_windows.h index ca7c9c5..20f24ef 100644 --- a/src/core/qwindowkit_windows.h +++ b/src/core/qwindowkit_windows.h @@ -125,6 +125,9 @@ QString stringValue(QStringView subKey) const; QPair<DWORD, bool> dwordValue(QStringView subKey) const; + template<typename T> + std::optional<T> value(QStringView subKey) const; + private: HKEY m_key; @@ -134,6 +137,33 @@ inline bool WindowsRegistryKey::isValid() const { return m_key != nullptr; } + + template<> + inline std::optional<DWORD> WindowsRegistryKey::value(QStringView subKey) const { + const auto dv = dwordValue(subKey); + if (!dv.second) { + return {}; + } + return dv.first; + } +#elif QT_VERSION < QT_VERSION_CHECK(6, 8, 1) + class WindowsRegistryKey : public QWinRegistryKey { + public: + + explicit WindowsRegistryKey(HKEY parentHandle, QStringView subKey, REGSAM permissions = KEY_READ, REGSAM access = 0); + + template<typename T> + inline std::optional<T> value(QStringView subKey) const; + }; + + template<> + inline std::optional<DWORD> WindowsRegistryKey::value(QStringView subKey) const { + const auto dv = dwordValue(subKey); + if (!dv.second) { + return {}; + } + return dv.first; + } #else using WindowsRegistryKey = QWinRegistryKey; #endif diff --git a/src/core/shared/qwkwindowsextra_p.h b/src/core/shared/qwkwindowsextra_p.h index 021b34e..52d8943 100644 --- a/src/core/shared/qwkwindowsextra_p.h +++ b/src/core/shared/qwkwindowsextra_p.h @@ -345,11 +345,8 @@ if (!registry.isValid()) { return false; } - auto value = registry.dwordValue(L"ColorPrevalence"); - if (!value.second) { - return false; - } - return value.first; + auto value = registry.value<DWORD>(L"ColorPrevalence"); + return value.value_or(false); } static inline bool isHighContrastModeEnabled() { @@ -368,11 +365,8 @@ if (!registry.isValid()) { return false; } - auto value = registry.dwordValue(L"AppsUseLightTheme"); - if (!value.second) { - return false; - } - return !value.first; + auto value = registry.value<DWORD>(L"AppsUseLightTheme"); + return value.value_or(false); #endif } @@ -398,13 +392,13 @@ if (!registry.isValid()) { return {}; } - auto value = registry.dwordValue(L"AccentColor"); - if (!value.second) { + auto value = registry.value<DWORD>(L"AccentColor"); + if (!value) { return {}; } // The retrieved value is in the #AABBGGRR format, we need to // convert it to the #AARRGGBB format which Qt expects. - QColor color = QColor::fromRgba(value.first); + QColor color = QColor::fromRgba(*value); if (!color.isValid()) { return {}; } -- Gitblit v1.9.1