Qt 为什么不';当我将窗口移动到具有不同DPI的屏幕时,我的QML项目是否会被缩放?
我使用的是Windows10和Qt5.15.1。当我将QML应用程序窗口从低DPI屏幕(100%比例)移动到高DPI屏幕(125%比例)时,窗口会按预期放大(调整大小)以使用更多像素。这使得窗口在两个屏幕上显示为相同的物理大小 但是窗口中的项目不可缩放——它们保持相同的像素数。因此,在高DPI屏幕上,所有项目的物理尺寸都较小 当我在具有不同DPI的屏幕之间移动窗口时,如何使项目缩放(到相同的物理大小)?我希望所有项目都出现这种情况,如文本、按钮、矩形等 我的QML是:Qt 为什么不';当我将窗口移动到具有不同DPI的屏幕时,我的QML项目是否会被缩放?,qt,windows-10,qml,dpi,Qt,Windows 10,Qml,Dpi,我使用的是Windows10和Qt5.15.1。当我将QML应用程序窗口从低DPI屏幕(100%比例)移动到高DPI屏幕(125%比例)时,窗口会按预期放大(调整大小)以使用更多像素。这使得窗口在两个屏幕上显示为相同的物理大小 但是窗口中的项目不可缩放——它们保持相同的像素数。因此,在高DPI屏幕上,所有项目的物理尺寸都较小 当我在具有不同DPI的屏幕之间移动窗口时,如何使项目缩放(到相同的物理大小)?我希望所有项目都出现这种情况,如文本、按钮、矩形等 我的QML是: import QtQuic
import QtQuick 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
visible: true
width: 240
height: 60
Text {
text: "Hello World"
font.pointSize: 14
}
}
我的Python是:
QtCore.QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
QtCore.QCoreApplication.setAttribute(Qt.AA_UseOpenGLES)
app = QtWidgets.QApplication([])
engine = QtQml.QQmlEngine()
context = QtQml.QQmlContext(engine.rootContext())
designer = QtQml.QQmlComponent(engine, 'main.qml')
designer.create(context)
app.exec_()
对我来说,使用更高的DPI会改变应用程序的尺寸,这其实很奇怪。但这并不是真正的“缩放”。它只是让窗户变大了。而且您没有将
矩形的大小
绑定到应用程序窗口
,因此它的大小保持不变。这里简单的答案是你可以这样做:
Rectangle {
anchors.fill: parent
color: "green"
}
这将使矩形保持与应用程序相同的大小
如果您确实希望应用程序的所有内容(包括矩形的子项)随着应用程序窗口大小的变化而缩放,则可以执行以下操作:
ApplicationWindow {
visible: true
width: defaultWidth
height: defaultHeight
property real defaultWidth: 320
property real defaultHeight: 240
Rectangle {
width: defaultWidth
height: defaultHeight
color: "green"
transform: Scale {
xScale: parent.width / defaultWidth
yScale: parent.height / defaultHeight
}
}
}
对我来说,使用更高的DPI会改变应用程序的尺寸,这其实很奇怪。但这并不是真正的“缩放”。它只是让窗户变大了。而且您没有将
矩形的大小
绑定到应用程序窗口
,因此它的大小保持不变。这里简单的答案是你可以这样做:
Rectangle {
anchors.fill: parent
color: "green"
}
这将使矩形保持与应用程序相同的大小
如果您确实希望应用程序的所有内容(包括矩形的子项)随着应用程序窗口大小的变化而缩放,则可以执行以下操作:
ApplicationWindow {
visible: true
width: defaultWidth
height: defaultHeight
property real defaultWidth: 320
property real defaultHeight: 240
Rectangle {
width: defaultWidth
height: defaultHeight
color: "green"
transform: Scale {
xScale: parent.width / defaultWidth
yScale: parent.height / defaultHeight
}
}
}
我学会了在默认情况下使用整数。所以在我的屏幕上,125%的缩放比例,它被四舍五入到100%。。。因此没有变化
通过将环境变量QT\u SCALE\u FACTOR\u ROUNDING\u POLICY
设置为PassThrough
,可以禁用此行为。或在代码中:
QtGui.QGuiApplication.setHighDpiScaleFactorRoundingPolicy(
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
或者,如果您知道监视器的比例因子,可以通过设置QT_SCREEN_scale_factors
环境变量(如QT_SCREEN_scale_factors=1.25)直接指定它们;1
现在我在两个屏幕上都得到了预期的自动缩放
我了解到,默认情况下,这是一个整数。所以在我的屏幕上,125%的缩放比例,它被四舍五入到100%。。。因此没有变化
通过将环境变量QT\u SCALE\u FACTOR\u ROUNDING\u POLICY
设置为PassThrough
,可以禁用此行为。或在代码中:
QtGui.QGuiApplication.setHighDpiScaleFactorRoundingPolicy(
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
或者,如果您知道监视器的比例因子,可以通过设置QT_SCREEN_scale_factors
环境变量(如QT_SCREEN_scale_factors=1.25)直接指定它们;1
现在我在两个屏幕上都得到了预期的自动缩放
我的问题是矩形没有被缩放到与用户相同的视觉大小。只有窗口的大小被正确调整。文本也有同样的问题——在DPI较高和较低的屏幕上,文本的像素数相同。在高DPI屏幕上,文本应该放大并使用更多像素,以便在两个屏幕上显示相同的物理大小。您是否尝试了我的第二个示例?这样也可以缩放文本。我不想将控件与窗口大小绑定。我只是想让它们适当地缩放。假设我将
矩形
替换为文本
。我将更新我的问题,因为我认为矩形
具有误导性。我的问题是,矩形没有被缩放到与用户相同的视觉大小。只有窗口的大小被正确调整。文本也有同样的问题——在DPI较高和较低的屏幕上,文本的像素数相同。在高DPI屏幕上,文本应该放大并使用更多像素,以便在两个屏幕上显示相同的物理大小。您是否尝试了我的第二个示例?这样也可以缩放文本。我不想将控件与窗口大小绑定。我只是想让它们适当地缩放。假设我将矩形
替换为文本
。我将更新我的问题,因为我认为矩形
具有误导性。您的main中是否有这一行。cpp:QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling)代码>?main.cpp中是否有这一行:QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling)代码>?很高兴知道!很高兴你弄明白了。很高兴知道!很高兴你弄明白了。