我们正在将一些较旧的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。
答案 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)
}
}