2017-01-02 43 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