Растяжение шрифта в QML - PullRequest
1 голос
/ 26 марта 2019

Мы конвертируем некоторый старый код виджета QT для использования QML, и я не могу найти эквивалентное свойство для операции QFont::setStretch().

Страница Шрифт QML показывает только семейство, полужирный шрифт, курсив, подчеркивание, pointSize, pixelSize, вес, оверлей, зачеркнутый, заглавные буквы, letterSpacing, wordSpacing, кернинг, предпочитатьShaping и hintingPreference.

Этот выбор шрифта выполняется внутри объекта Text, в соответствии с:

Text {
    font.family: "LiberationSans"
    font.pixelSize: 178
    font.weight: 80
    //font.stretch: 75 - doesn't work, no such property
}

Нет ли способа установить коэффициент растяжения в QML. Кстати, мы используем Qt 5.6.

1 Ответ

1 голос
/ 26 марта 2019

К сожалению, это свойство не доступно для QML, возможное решение - использовать вспомогательный класс, который получает QFont, изменить растяжку и вернуть новый QFont.

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QFont>

class FontHelper: public QObject{
    Q_OBJECT
public:
    using QObject::QObject;
    Q_INVOKABLE QFont changeStretchFont(const QFont & font, int factor){
        QFont fn(font);
        fn.setStretch(factor);
        return fn;
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    FontHelper helper;
    engine.rootContext()->setContextProperty("fontHelper", &helper);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

#include "main.moc"

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2

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

    Text {
        id: txt
        font.family: "Helvetica"
        font.pointSize: 13
        font.bold: true
        text: "hello World"
        Component.onCompleted: txt.font = fontHelper.changeStretchFont(txt.font, 200)
    }
}
...