2017-01-02 47 views
0

我想在C++中使用Qt/QML从头开始编写文本编辑器。为了绘制文本我使用CanvasContext2D,它看起来大致是这样的:QML画布/ Context2D fillText()意外的行为

function drawString(text, x, y, font) { 
    var ctx = getContext("2d"); 
    ctx.font = font; 
    ctx.fillStyle = "black"; 
    ctx.fillText(qsTr(text), x, y); 
    ctx.stroke(); 
} 

为了以图形方式表示选择的区域,我想反转selecion,例如将一个黑色的矩形在一个区域并使文本变白。

为此,我将使用ctx.globalCompositeOperation = "xor"

所以我跑进问题是:当我在黑色的绘制功能的文字上方,然后事后画在同一地点同一文本中白我期望这幅画布再次变成白色。相反,文本的轮廓还是可见的(就像有一个影子)。

我已经尝试关闭所有阴影参数,但它没有解决我的问题。

下面是截图,所以你得到的是什么,它看起来像一个更好的主意:

enter image description here

+1

考虑发布完整的代码来重现问题。 – dtech

回答

1

没关系,我发现自己的问题。 antialiasing属性设置为true,这导致了该效果。通过将其设置为false,文字看起来不那么漂亮,但阴影消失了。

+0

您是否尝试在重新粉刷前清除画布? (尝试'ctx.clearRect(0,0,width,height)')。 – Afilu