From 886f31d0c0df89e4e71bcfe3e175248fe800d868 Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <2546789017@qq.com> Date: Mon, 19 Oct 2020 22:07:12 +0800 Subject: [PATCH] Fix two issues. 1. The border line may disappear when resizing: fixed by change the line width to 2px. 2. Some part of the window become totally transparent after DPI changes: fixed by calling update() after DPI changes. Signed-off-by: Yuhang Zhao <2546789017@qq.com> --- examples/Win32Demo/widget.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/examples/Win32Demo/widget.cpp b/examples/Win32Demo/widget.cpp index 748dea2..3cd6cae 100644 --- a/examples/Win32Demo/widget.cpp +++ b/examples/Win32Demo/widget.cpp @@ -32,6 +32,11 @@ #include #include +// Some old SDK doesn't have this value. +#ifndef WM_DPICHANGED +#define WM_DPICHANGED 0x02E0 +#endif + // Copied from windowsx.h #define GET_X_LPARAM(lp) ((int) (short) LOWORD(lp)) #define GET_Y_LPARAM(lp) ((int) (short) HIWORD(lp)) @@ -289,6 +294,7 @@ bool Widget::eventFilter(QObject *object, QEvent *event) { Q_ASSERT(object); Q_ASSERT(event); + Q_ASSERT(object == this); switch (event->type()) { case QEvent::WindowStateChange: { if (shouldDrawBorder(true)) { @@ -349,6 +355,9 @@ bool Widget::nativeEvent(const QByteArray &eventType, void *message, long *resul } break; } + case WM_DPICHANGED: + update(); + break; default: break; } @@ -362,7 +371,7 @@ void Widget::paintEvent(QPaintEvent *event) if (shouldDrawBorder()) { QPainter painter(this); painter.save(); - painter.setPen(borderColor()); + painter.setPen({borderColor(), 2.0}); painter.drawLine(0, 0, width(), 0); painter.drawLine(0, height(), width(), height()); painter.drawLine(0, 0, 0, height());