How i can create a curved text in qml canvas eleme

2019-07-25 14:12发布

i want to create a curved text in qml it's possible? Is there a javascript library that i can import to do it?

enter image description here

My idea is that it's possible maybe with canvas element but i don't know how i can do it... it's a good idea??

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


    Canvas{

      anchors.fill: parent

      onPaint: {
          var ctx = getContext("2d");
          ctx.fillStyle = Qt.rgba(1, 0, 0, 1);
          ctx.fillRect(0, 0, width, height);
          //how i can create curved text??? 

      }

    }
}

1条回答
Bombasti
2楼-- · 2019-07-25 15:10

Hello I tried the code into the link posted by @folibis , work perfectly!!! This is the code :

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

    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 Verdana'

          //ctx.font = '30px Courier New'
          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);

      }
    }
} 
查看更多
登录 后发表回答