QML Canvas 使用 QT_SCALE_FACTOR 设置不正确呈现

问题描述

我有一个在 Ubuntu 和 RaspBerry Pi 3B+ 上运行的 Qt/QML 程序。该程序在两个平台上都运行良好,但是 Pi 具有高 DPI 屏幕,因此我在该设备上将 QT_SCALE_FACTOR 设置为 1.3,以使控件显示正确的大小。除了一件事之外,它可以完美运行:ComboBox 和 SpinBox 控件上的指标绘制的大小与未设置 QT_SCALE_FACTOR 时的大小相同,并且如果应用了 QT_SCALE_FACTOR,它们将填充的矩形的其余部分用随机像素填充。在 Ubuntu 上设置 QT_SCALE_FACTOR 没有任何问题。

我尝试用自定义指标替换指标,但结果相同。

不设置 QT_SCALE_FACTOR 会产生正确呈现的指标。

这是在 Linux pi3 4.19.75-v7+ 上使用 Qt 5.13.2 和 QtQuick.Controls 2.5 #1270 SMP Tue Sep 24 18:45:11 BST 2019 armv7l GNU/Linux

下图说明了 QT_SCALE_FACTOR=2 时的行为:

ComboBox with defective custom indicator

SpinBox standard indicators

这是第一张图片自定义指标的代码

ComboBox {
    id: cb
...
    width: 200
...
    indicator: Canvas {
        id: canvas
        x: cb.width - width - cb.rightPadding
        y: cb.topPadding + (cb.availableHeight - height) / 2
        width: 12*2
        height: 8*2
        contextType: "2d"

        Connections {
            target: cb
            function onpressedChanged() { canvas.requestPaint(); }
        }

        onPaint: {
            var context = getContext("2d");
            context.reset();
            context.beginPath();
            context.moveto(0,0);
            context.lineto(width,0);
            context.lineto(width / 2,height);
            context.closePath();
            context.fillStyle = cb.pressed ? "#17a81a" : "#21be2b";
            context.fill();
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)