我正在使用QML编写一个应用程序。当我用非整数因子缩放我的GUI时,我遇到了麻烦。根据医生的说法,Qt::AA_EnableHighDpiScaling
应该启用与设备无关的像素,因此自动处理大部分缩放:
Qt5.6中引入的应用程序属性
Qt::AA_EnableHighDpiScaling
支持基于监视器像素密度的自动缩放。
在博文约5.6中,他们承认可能存在问题:
问:支持非整数比例因子吗? 答: Qt在API中使用scale,并允许通过
QT_SCALE_FACTOR
设置非整数缩放因子。然而,Qt并不保证在这种情况下图形和样式是无故障的。样式可能首先崩溃:融合风格通常是最可伸缩的。Qt平台插件将报告的缩放因子舍入最近的整数。
在评论中:
问:这是否意味着它仍然是有效的整数?150% DPI比例的Windows会发生什么情况? 是的,除非你用
QT_SCALE_FACTOR
手动设置/更正它。然后,150%应该增加到2倍。
因此,对我来说,这导致了一个滑稽的大GUI时,缩放到150%。然而,文本的缩放是正确的,这就导致了奇怪的工件,比如带有小文本的大按钮。
我是误解了这是怎么回事,还是现在还不可能呢?
发布于 2017-05-16 14:13:30
正如评论中提到的,我对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
来计算缩放因子,但这依赖于显示器来正确发布其像素密度,这对我来说是经常失败的。
您也可以使用它来创建一个窗口,当您调整窗口的大小时,该窗口会自动缩放内容。
所以如果问题是环境变量是可能的-我不这么认为。如果问题是,是否可以根据某些外部输入来缩放窗口及其内容--以下是一个解决方案。
https://stackoverflow.com/questions/43997297
复制相似问题