QML缩放不适用于非整数比例因子

我正在使用QML编写一个应用程序。 当我通过非整数因子缩放我的GUI时遇到了麻烦。 根据文档 , Qt::AA_EnableHighDpiScaling应该启用与设备无关的像素,因此会自动处理大部分缩放:

在Qt 5.6中引入的应用程序属性Qt::AA_EnableHighDpiScaling可以根据显示器的像素密度自动缩放。

在一篇关于5.6的博客文章中 ,他们承认可能存在一些问题:

问:是否支持非整数比例因子?

答:Qt在API中使用了qreal,并允许通过QT_SCALE_FACTOR设置非整数比例因子。 但是,Qt并不保证在这种情况下graphics和样式将无故障。 风格可能会首先打破:融合风格通常最具可扩展性。 Qt平台将报告的比例因子四舍五入到最接近的整数。

并在评论中:

问:这是否意味着它仍然是有效的整数? Windows有150%的DPI规模会发生什么?

答:是的,除非您使用QT_SCALE_FACTOR手动设置/更正。 那么150%应该去2倍。

所以对于我来说,当缩放到150%时,这会导致一个非常大的GUI。 但是,正确的文字会导致怪异的文物,如小文字大button。

我误解了这是如何工作的,还是真的不可能呢?

Solutions Collecting From Web of "QML缩放不适用于非整数比例因子"

正如在评论中提到的,我不满意QT_SCALE_FACTOR所以我决定把它做成我的自我,并创建一个ScaleableWindow像这样:

 import QtQuick 2.0 import QtQuick.Controls 2.0 ApplicationWindow { id: root property real scale: 1 property real unscaledWidth: 100 property real unscaledHeight: 100 Component.onCompleted: { var i = Qt.application.arguments.indexOf('--scale') if (i > -1 && Qt.application.arguments[i+1]) scale = parseFloat(Qt.application.arguments[i+1]) } width: unscaledWidth * scale height: unscaledHeight * scale property alias scaledContentItem: scaledContent default property alias scaledContent: scaledContent.data Item { id: scaledContent width: root.unscaledWidth height: root.unscaledHeight scale: root.scale anchors.centerIn: parent } } 

您现在可以通过传递例如命令行参数--scale 0.4来指定比例因子

您也可以尝试使用Screen.pixelDensity来计算比例因子,但是依靠显示来正确地发布其像素密度,这对我来说经常失败。

您也可以使用它来创建一个窗口,在调整窗口大小时自动缩放内容。


所以,如果问题是可能的环境变量 – 我不这么认为。 如果问题是否可以根据外部输入来缩放窗口及其内容 – 这是一个解决方案。