【问题标题】:QQuickView title bar too large on secondary monitorQQuickView 标题栏在辅助显示器上太大
【发布时间】:2020-06-22 21:39:30
【问题描述】:

当我将窗口移动到辅助监视器时,QQuickView Qt 应用程序的标题栏太大。它在我的主显示器上正确显示。如果我使用 QWidget 而不是 QQuickView,标题栏的大小是正确的。

是否可以让QQuickView 应用程序的标题栏正确显示?如果有,怎么做?

我在 Windows 10 版本 1803 上使用 PySide2 版本 5.15.0。我的主显示器 DPI 设置为 125%,我的辅助显示器设置为 100%。该应用程序作为“每显示器 DPI 感知”运行。 Qt documentation on high DPI support 对解决这个问题没有任何帮助。我尝试了各种 DPI 设置和环境变量。

test.py

from PySide2 import QtWidgets
from PySide2.QtCore import QUrl
from PySide2.QtQuick import QQuickView

if __name__ == '__main__':
    app = QtWidgets.QApplication([])

    view = QQuickView()
    view.setResizeMode(QQuickView.SizeRootObjectToView)
    view.setSource(QUrl('view.qml'))
    view.show()

    app.exec_()

view.qml

import QtQuick 2.0

Rectangle {
    width: 300
    height: 200
    color: "green"

    Text {
        text: "Hello World"
        anchors.centerIn: parent
    }
}

【问题讨论】:

    标签: python qml dpi pyside2


    【解决方案1】:

    解决方案

    感谢 @eyllanesc 提供有关如何尝试不同渲染器的提示。

    通过在实例化 QApplication 对象之前添加以下行之一,将 Qt 配置为使用 ANGLE 渲染器:

    QtWidgets.QApplication.setAttribute(Qt.AA_UseOpenGLES)
    
    os.environ['QT_OPENGL'] = 'angle'
    

    请参阅Qt 5 on Windows ANGLE and OpenGL 了解含义。

    背景

    在 Windows 上使用 OpenGL 渲染器在 Qt Quick 应用程序中正确缩放非客户区(标题栏)似乎存在一些长期存在的问题。

    Qt 错误报告QTBUG-78143 是关于当dpiawareness2 时非客户端项目没有被缩放。该错误已作为 Microsoft 知道但尚未修复的 Windows 问题而关闭。

    还有老的QTBUG-65804 也谈到了同样的问题。

    QTBUG-68712 谈到实现一个新的 Windows 值 DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2,但它会带回一个旧错误,直到 Microsoft 修复某些东西。

    我发现an SO question也有很多讨论。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多