簡體   English   中英

我如何在canvas qml元素中使用FontLoader qml對象?

[英]How i can use FontLoader qml object in canvas qml element?

您好,我想在Canvas元素中使用設置為Fontloader qml對象的字體,其中我有一個彎曲的文本。 有可能嗎? 在一般情況下更改畫布文本的字體家族是可能的嗎? 這是我的代碼:

Window {
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")


        FontLoader { id: webFont;name: "OpenSans"; source: "qrc:/OpenSans-Bold.ttf" }

        Canvas{

            property string nameFont: webFont.name

            function drawTextAlongArc(context, str, centerX, centerY, radius, angle)
            {

                context.save();
                context.translate(centerX, centerY);
                context.rotate(-1 * angle / 2);
                context.rotate(-1 * (angle / str.length) / 2);
                for (var n = 0; n < str.length; n++) {
                    context.rotate(angle / str.length);
                    context.save();
                    context.translate(0, -1 * radius);
                    var char1 = str[n];
                    context.fillText(char1, 0, 0);
                    context.restore();
                }
                context.restore();

            }


          anchors.fill: parent
          onPaint: {
              var ctx = getContext("2d");
              ctx.fillStyle = Qt.rgba(1, 1, 1, 1);
              ctx.fillRect(0, 0, width, height);

              ctx.font='50px OpenSans'
              ctx.textAlign = "center";

              var centerX = width / 2;
              var centerY = height/2; //height - 30;
              var angle   = Math.PI * 0.8; // radians
              var radius  = 180;
              ctx.fillStyle="#000000"
              drawTextAlongArc(ctx, "Hello World", centerX, centerY, radius, angle);
          }
        }
    }

我想使用我用指令設置的Verdana字體代替:

ctx.font ='50px Verdana'

設置為FontLoader的字體{id:webFont; 來源:“ qrc:/OpenSans-Bold.ttf”}

我該怎么辦?

正如您在評論中所說,問題確實是字體名稱中的空格。

文檔中所述

注意:font-size和font-family屬性是必需的,並且必須按照上面顯示的順序排列。 另外,必須引用名稱中帶有空格的字體系列。

因此,應該通過加載字體來解決問題

FontLoader { id: webFont; source: "qrc:/OpenSans-Bold.ttf" }

和使用

ctx.font='50px "Open Sans"'

甚至更好:

ctx.font='50px "%1"'.arg(webFont.name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM