Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
Yuhang Zhao 2020-07-30 12:28:47 +08:00
parent 236ac54faf
commit e8213a7f3e
2 changed files with 10 additions and 1 deletions

View File

@ -49,3 +49,11 @@ This is a Qt bug and hasn't been fixed till Qt 5.15. Its root cause is the windo
当DPI改变或窗口被移动到一个DPI不同的显示器后控件位置不正确看起来或许像是花屏了 当DPI改变或窗口被移动到一个DPI不同的显示器后控件位置不正确看起来或许像是花屏了
这是Qt自身的bug并且直到5.15都还没有被修复。这个bug是窗口没有重绘导致的控件的位置实际上是正确的只是画面没有刷新看起来像是错位了。临时的解决方案有两个一个是直接忽略这个问题所有Qt程序都存在这个问题但绝大多数都没有对这个问题进行处理我怀疑大多数开发者也不知道这个地方有问题另一个是手动调整窗口的尺寸来触发重绘最好只调整一个像素这样的话能触发重绘但用户基本看不到这个过程。不要使用诸如`RedrawWindow`这样的平台原生API来重绘因为Qt程序的界面全都是自绘的窗口的绘制已经完全被Qt接管了你这样手动调用API是无效的必须要Qt自己去重绘才能生效。 这是Qt自身的bug并且直到5.15都还没有被修复。这个bug是窗口没有重绘导致的控件的位置实际上是正确的只是画面没有刷新看起来像是错位了。临时的解决方案有两个一个是直接忽略这个问题所有Qt程序都存在这个问题但绝大多数都没有对这个问题进行处理我怀疑大多数开发者也不知道这个地方有问题另一个是手动调整窗口的尺寸来触发重绘最好只调整一个像素这样的话能触发重绘但用户基本看不到这个过程。不要使用诸如`RedrawWindow`这样的平台原生API来重绘因为Qt程序的界面全都是自绘的窗口的绘制已经完全被Qt接管了你这样手动调用API是无效的必须要Qt自己去重绘才能生效。
## Parent widget can't be moved or resized if a frameless child widget is closed / 当一个无边框的子控件(通常是一个窗口)关闭后,其父控件不能被拖动或改变尺寸
If you have a child widget (usually you are using it as a window) and it has parent, when you close it, it's parent widget can't be dragged or resized.
Don't know why but here is how to fix it: `QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);`
原因暂时未知,但有解决方案:`QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);`

View File

@ -14,7 +14,7 @@
class FramelessWidget : public QWidget class FramelessWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
Q_DISABLE_COPY_MOVE(FramelessWidget) // Q_DISABLE_COPY_MOVE(FramelessWidget) // Since Qt 5.13
public: public:
explicit FramelessWidget(QWidget *parent = nullptr) : QWidget(parent) {} explicit FramelessWidget(QWidget *parent = nullptr) : QWidget(parent) {}
@ -41,6 +41,7 @@ private:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
// High DPI scaling is enabled by default from Qt 6 // High DPI scaling is enabled by default from Qt 6
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
// Windows: we are using the manifest file to get maximum compatibility // Windows: we are using the manifest file to get maximum compatibility