QQuickView 标题栏在辅助监视器上太大
QQuickView title bar too large on secondary monitor
当我将 window 移动到我的辅助显示器时,我的 QQuickView
Qt 应用程序的标题栏太大。它在我的主显示器上正确显示。如果我使用 QWidget
而不是 QQuickView
.
,标题栏的大小是正确的
是否可以使 QQuickView
应用程序的标题栏正确显示?如果是,怎么做?
我在 Windows 10 版本 1803 上使用 PySide2 版本 5.15.0。我的主显示器 DPI 设置为 125%,我的辅助显示器设置为 100%。该应用程序 运行 作为“per-monitor 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
}
}
解决方案
感谢@eyllanesc 提供有关如何尝试不同渲染器的提示。
通过在实例化 QApplication
object:
之前添加以下行之一,将 Qt 配置为使用 ANGLE 渲染器
QtWidgets.QApplication.setAttribute(Qt.AA_UseOpenGLES)
os.environ['QT_OPENGL'] = 'angle'
有关含义,请参阅 Qt 5 on Windows ANGLE and OpenGL。
背景
在 Windows 上使用 OpenGL 渲染器的 Qt Quick 应用程序中正确缩放 non-client 区域(标题栏)似乎存在一些长期存在的问题。
Qt 错误报告 QTBUG-78143 是关于 non-client 项在 dpiawareness
为 2
时未缩放的。该 bug 已作为 Windows 的问题关闭,Microsoft 知道但尚未修复。
还有更老的QTBUG-65804也讲了同样的问题
QTBUG-68712 talks about implementing a new Windows value, DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2
,但它会带回一个较旧的错误,直到 Microsoft 修复某些东西。
我发现 an SO question 也有很多讨论。
当我将 window 移动到我的辅助显示器时,我的 QQuickView
Qt 应用程序的标题栏太大。它在我的主显示器上正确显示。如果我使用 QWidget
而不是 QQuickView
.
是否可以使 QQuickView
应用程序的标题栏正确显示?如果是,怎么做?
我在 Windows 10 版本 1803 上使用 PySide2 版本 5.15.0。我的主显示器 DPI 设置为 125%,我的辅助显示器设置为 100%。该应用程序 运行 作为“per-monitor 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
}
}
解决方案
感谢@eyllanesc 提供有关如何尝试不同渲染器的提示。
通过在实例化 QApplication
object:
QtWidgets.QApplication.setAttribute(Qt.AA_UseOpenGLES)
os.environ['QT_OPENGL'] = 'angle'
有关含义,请参阅 Qt 5 on Windows ANGLE and OpenGL。
背景
在 Windows 上使用 OpenGL 渲染器的 Qt Quick 应用程序中正确缩放 non-client 区域(标题栏)似乎存在一些长期存在的问题。
Qt 错误报告 QTBUG-78143 是关于 non-client 项在 dpiawareness
为 2
时未缩放的。该 bug 已作为 Windows 的问题关闭,Microsoft 知道但尚未修复。
还有更老的QTBUG-65804也讲了同样的问题
QTBUG-68712 talks about implementing a new Windows value, DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2
,但它会带回一个较旧的错误,直到 Microsoft 修复某些东西。
我发现 an SO question 也有很多讨论。