首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QML缩放不适用于非整数缩放因子。

QML缩放不适用于非整数缩放因子。
EN

Stack Overflow用户
提问于 2017-05-16 09:19:49
回答 1查看 1.7K关注 0票数 2

我正在使用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%。然而,文本的缩放是正确的,这就导致了奇怪的工件,比如带有小文本的大按钮。

我是误解了这是怎么回事,还是现在还不可能呢?

EN

回答 1

Stack Overflow用户

发布于 2017-05-16 14:13:30

正如评论中提到的,我对QT_SCALE_FACTOR不满意,所以我决定让它成为我自己,并创建了这样一个ScaleableWindow

代码语言:javascript
运行
复制
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来计算缩放因子,但这依赖于显示器来正确发布其像素密度,这对我来说是经常失败的。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43997297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档