QML: цикл привязки при расчете позиции Y - PullRequest
0 голосов
/ 17 февраля 2019

Вот мой код:

FontLoader { id: font_bold; source: "qrc:/font/MyFont Bold.ttf" }
FontLoader { id: font_medium; source: "qrc:/font/MyFont Medium.ttf" }
FontMetrics { id: fontMetrics }

function getBaseline(fontFamily, fontPixelSize)
{
    fontMetrics.font.family = fontFamily;
    fontMetrics.font.pixelSize = fontPixelSize;
    return fontMetrics.ascent;
}

function getY(desiredY, fontFamily, fontPixelSize)
{
    return desiredY - getBaseline(fontFamily, fontPixelSize);
}

Text {
    x: 100
    y: getY(100, font.family, font.pixelSize)
    font.family: font_bold.name
    font.pixelSize: 96
    text: "foo"
}

Text {
    x: 200
    y: getY(150, font.family, font.pixelSize)
    font.family: font_medium.name
    font.pixelSize: 48
    text: "foo"
}

Цель состоит в том, чтобы вычислить фактическую позицию y из требуемой, удалив смещение всплытия текущего шрифта, чтобы базовая линия находилась в нужной позиции..

Я получил эту ошибку для обеих строк y: getY(...):

QML QQuickText: Обнаружен цикл привязки для свойства "y"

Я не знаюне вижу, где находится петля привязки.Свойство y рассчитывается как желаемое положение - подъем шрифта.Оба не связаны с y.

1 Ответ

0 голосов
/ 18 февраля 2019

Это потому, что вы используете FontMetrics для обоих шрифтов, непрерывно изменяя всплытие.Помните, что вы привязываете функцию к y-позиции и, таким образом, каждый раз, когда FontMetrics устанавливается на другой шрифт, она будет запускать обновление для y-позиции обоих Text.

Я предлагаю использовать два FontMetrics, один для жирного и один для среднего.

FontMetrics { id: fontMetricsBold; font: font_bold }
FontMetrics { id: fontMetricsMedium; font: font_medium }

Text {
    x: 100
    y: 100 - fontMetricsBold.ascent
    font.family: font_bold.name
    font.pixelSize: 96
    text: "foo"
}

Text {
    x: 200
    y: 150 - fontMetricsMedium.ascent
    font.family: font_medium.name
    font.pixelSize: 48
    text: "bar"
}

Обратите внимание, у меня нет шрифтов, поэтому я оставляю это как упражнение.Возможно, настройка FontMetrics должна быть выполнена иначе, чем FontLoader.

...