当尝试绘制相对简单的图形时,我在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();
}
}
}
我最终出现了极其奇怪的图形行为。
然后,当我单击特制按钮时(为了将问题归结为一个简单的组件),我有:
基本上,每当我尝试重绘该死的画布时,首先将其清除(我也尝试使用背景色来尝试ctx.reset(),ctx.fillRect等),最终我得到的字体渲染要少得多可读,这让我感到困扰。
这里有人知道如何避免这种情况吗? 我不知道它是否有用,但我使用的是分辨率为1080p的27英寸显示屏。
谢谢!