Как я могу использовать объект FontLoader qml в элементе canvas qml? - PullRequest
0 голосов
/ 26 апреля 2018

Здравствуйте, я хочу использовать набор шрифтов для объекта Fontloader qml в элементе Canvas, где у меня есть изогнутый текст. Возможно ли это сделать? Вообще изменить шрифт семейства канвы текста можно? Это мой код:

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"}

Как я могу это сделать?

1 Ответ

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

Как вы сказали в комментариях, проблема действительно в пробелах в имени шрифта.

Как уже упоминалось в документе :

Примечание. Свойства font-size и font-family являются обязательными и должны быть в том порядке, в котором они показаны выше. Кроме того, семейство шрифтов с пробелами в его имени должны быть заключены в кавычки.

Так что проблема должна быть решена загрузкой шрифта с

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

и использование

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

или даже лучше:

ctx.font='50px "%1"'.arg(webFont.name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...