前言
Qt Quick开发的窗口,如果电脑是双屏,两个屏幕的缩放比例如果不一样就会发现,窗口在第一次显示的屏幕上是正常的,拖放到另一个屏幕上就会出问题。
本文是在PySide2_5.15.2上测试的。
这是Qt的BUG
Qt rounds DPI scaling在默认情况下是整型的。它的策略是4舍5入。
假如屏幕上使用125%的缩放比例,它被四舍五入为100%,所以窗口大小不会变化,但是内容却会正常缩放,就会导致窗口和内容缩放不一致。
解决方法
解决方法:
修改默认的缩放策略,不让它4舍5入。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from PySide2.QtCore import QCoreApplication, Qt from PySide2.QtGui import QGuiApplication from PySide2.QtQml import QQmlApplicationEngine
if __name__ == "__main__":
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine() qml_url = QUrl("qrc:/main.qml") engine.load(qml_url)
if not engine.rootObjects(): sys.exit(-1) sys.exit(app.exec_())
|
主要是以下几行
1 2 3
| QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
|
这个问题在Qt6.2.3上是已经都解决掉了的。