QML 中的字体拉伸
Font stretching in QML
我们正在将一些较旧的 QT 小部件代码转换为使用 QML,但我找不到 QFont::setStretch()
操作的等效 属性。
QML Font page 仅显示系列、粗体、斜体、下划线、pointSize、pixelSize、粗细、上划线、删除线、大写、字母间距、字间距、字距调整、preferShaping 和 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。
不幸的是,这个 属性 没有暴露给 QML,一个可能的解决方案是使用接收 QFont 的助手 class,更改拉伸和 return 新的 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)
}
}
试试这个:
Text {
font.family: "LiberationSans"
font.pixelSize: 178
font.weight: 80
transform: Scale { xScale: 0.75}
//font.stretch: 75 - doesn't work, no such property
}
我们正在将一些较旧的 QT 小部件代码转换为使用 QML,但我找不到 QFont::setStretch()
操作的等效 属性。
QML Font page 仅显示系列、粗体、斜体、下划线、pointSize、pixelSize、粗细、上划线、删除线、大写、字母间距、字间距、字距调整、preferShaping 和 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。
不幸的是,这个 属性 没有暴露给 QML,一个可能的解决方案是使用接收 QFont 的助手 class,更改拉伸和 return 新的 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)
}
}
试试这个:
Text {
font.family: "LiberationSans"
font.pixelSize: 178
font.weight: 80
transform: Scale { xScale: 0.75}
//font.stretch: 75 - doesn't work, no such property
}