From 47910161c99677b51745b323a7cc07cf8bc9b00e Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <2546789017@qq.com> Date: Mon, 19 Oct 2020 18:24:38 +0800 Subject: [PATCH] Fix build for old Qt versions. Signed-off-by: Yuhang Zhao <2546789017@qq.com> --- framelesshelper.cpp | 8 ++++++++ framelesswindowsmanager.cpp | 5 +++++ winnativeeventfilter.cpp | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/framelesshelper.cpp b/framelesshelper.cpp index f9de5c9..91c9e37 100644 --- a/framelesshelper.cpp +++ b/framelesshelper.cpp @@ -127,7 +127,15 @@ void FramelessHelper::moveWindowToDesktopCenter(QObject *obj) else if (obj->isWidgetType()) { const auto widget = qobject_cast(obj); if (widget && widget->isTopLevel()) { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) const QSize ss = widget->screen()->size(); +#else + QSize ss = {}; + QWindow *window = widget->windowHandle(); + if (window) { + ss = window->screen()->size(); + } +#endif const int sw = ss.width(); const int sh = ss.height(); const int ww = widget->width(); diff --git a/framelesswindowsmanager.cpp b/framelesswindowsmanager.cpp index 83961a0..86c2ba4 100644 --- a/framelesswindowsmanager.cpp +++ b/framelesswindowsmanager.cpp @@ -57,7 +57,12 @@ QScreen *getCurrentScreenFromWindow(QObject *window) } #ifdef QT_WIDGETS_LIB else if (window->isWidgetType()) { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) return qobject_cast(window)->screen(); +#else + QWindow *win = qobject_cast(window)->windowHandle(); + return win ? win->screen() : nullptr; +#endif } #endif else { diff --git a/winnativeeventfilter.cpp b/winnativeeventfilter.cpp index 9c0fdc4..88e6388 100644 --- a/winnativeeventfilter.cpp +++ b/winnativeeventfilter.cpp @@ -1151,7 +1151,14 @@ QString getCurrentScreenIdentifier(const HWND handle) #ifdef QT_WIDGETS_LIB const QWidget *widget = QWidget::find(reinterpret_cast(handle)); if (widget && widget->isTopLevel()) { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) currentScreen = widget->screen(); +#else + QWindow *window = widget->windowHandle(); + if (window) { + currentScreen = window->screen(); + } +#endif } #endif if (!currentScreen) {