У меня странная проблема в 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 с моим цветом фона и т. Д.), Я получаю гораздо меньше рендеринга шрифтов. читается, и это беспокоит меня.
Есть здесь кто-нибудь, кто знает, как этого избежать?
Не знаю, полезно ли это, но я использую 27-дюймовый дисплей с разрешением 1080p.
Спасибо!