QML中的字体拉伸

时间:2019-03-26 01:48:41

标签: qt fonts qml qt5 stretch

我们正在将一些较旧的QT小部件代码转换为使用QML,但我找不到QFont::setStretch()操作的等效属性。

QML Font page仅显示家庭,粗体,斜体,下划线,pointSize,pixelSize,粗细,上划线,删除线,大写,letterSpacing,wordSpacing,字距,字距调整,preferredShaping和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 个答案:

答案 0 :(得分:1)

不幸的是,此属性未暴露给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)
    }
}