Как я могу создать изогнутый текст в элементе холста qml? - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу создать изогнутый текст в qml, это возможно?Есть ли библиотека JavaScript, которую я могу импортировать, чтобы сделать это?

enter image description here

Моя идея заключается в том, что это возможно, возможно, с элементом холста, но я не знаюкак я могу это сделать ... это хорошая идея ??

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 Ответ

0 голосов
/ 26 апреля 2018

Здравствуйте, я попробовал код в ссылке, размещенной @folibis, работает отлично !!! Это код:

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);

      }
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...