QT / QML中的奇怪画布行为

时间:2019-01-08 17:26:19

标签: qt canvas html5-canvas qml drawing

当尝试绘制相对简单的图形时,我在QML中遇到一个奇怪的问题。 我正在将PyQt 5与QT 5.11和Ubuntu 18.04结合使用。 由于我正在编写的图形部分大部分是固定的(大约每1秒钟更改一次),因此我发现canvas是一种无需使用QPainter即可绘制图形的便捷方法。但这一直是字体的噩梦。

例如,当绘制这个简单的QML 组件时:

import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11

import QtGraphicalEffects 1.0

Rectangle {
    id: cont_rect

    Button {
        text: "Repaint"
        onClicked: {
            cv.clearcv()
            cv.requestPaint()
        }
    }

    property string cvfont: "13px Ubuntu"

    height: 80
    width: 300

    color: "#132931"

    Canvas {
        anchors.fill: parent
        antialiasing: true
        contextType: '2d'

        id: cv
        width:  cont_rect.width
        height: cont_rect.height

        function clearcv() {
            var ctx = cv.context
            ctx.clearRect(0, 0, width, height)
            ctx.fillStyle = "black"
        }


        function drawStateLine() {
            var ctx = (cv.context == null) ? getContext("2d", {alpha: false}) : cv.context
            var x = width/2, y = height - 10
            var txt_angle = -45 * 2*Math.PI / 360

            ctx.save()
            ctx.translate(x,y)
            ctx.rotate(txt_angle)
            ctx.fillStyle = "royalblue"
            ctx.textAlign = "left"
            ctx.font = cvfont
            ctx.textBaseline = "middle"
            ctx.globalAlpha = 1
            ctx.fillText("Detected", 0, 0)
            ctx.restore()
        }

        onPaint: {
            drawStateLine();
        }
    }
}

我最终出现了极其奇怪的图形行为。

第一次渲染我的组件时,我会看到漂亮的文字: enter image description here

然后,当我单击特制按钮时(为了将问题归结为一个简单的组件),我有:

enter image description here

基本上,每当我尝试重绘该死的画布时,首先将其清除(我也尝试使用背景色来尝试ctx.reset(),ctx.fillRect等),最终我得到的字体渲染要少得多可读,这让我感到困扰。

这里有人知道如何避免这种情况吗? 我不知道它是否有用,但我使用的是分辨率为1080p的27英寸显示屏。

谢谢!

0 个答案:

没有答案