我有一个 png 位图,其中一个接一个地绘制了许多“字形”,还有一个文本文件,该文件将 ascii 数字与该位图中的位置和大小相关联。字形是使用不同颜色和透明度级别手绘的。
不知何故,我需要在 QML 上打开并使用这种字体。不幸的是,QML 似乎不“按原样”支持位图字体。
有什么解决办法吗?
发布此问题后几天,我一直在研究解决方案。从那时起,似乎有很多人仍在尝试在 Qt Quick 中使用“老式”位图字体。我找到的解决方案非常优雅,并且性能非常好。
import QtQuick 1.1
Row {
property string text: ""
Repeater {
model: text.length
Image {
source: "bitmapfont/" + text.charCodeAt(index) + ".png"
}
}
}
在与其他 qml 代码相同的目录中另存为“TextBitmap.qml”,然后创建一个称为字体名称的子目录(在本例中为“bitmapfont”)。您需要单独绘制或剪切每个位图字体字形,并将它们作为单独的 .png 存储在该子文件夹中,其名称是该字形的 Unicode;例如对于字符“A”的 bitmapfont/65.png,对于字符“B”的 bitmapfont/66.png 等等。
当这个自定义的 TextBitmap 元素第一次被渲染时——或者任何时候文本属性被改变——Repeater 会自动为文本中的每个字符创建一个图像元素,每个显示来自“bitmapfont”的相应的 .png。
像这样使用它:
import QtQuick 1.1
Rectangle {
width: 800
height: 500
TextBitmap {
text: "Hello Bitmap Fonts!"
}
}
在http://www.royconejo.com/bitmap-fonts-in-qt-quick-qml/中,您会找到更详细的 TextBitmap 元素、其外观的视频,甚至还有一个示例项目。
我希望它可以帮助某人!
这不能直接使用 Qt 的字体基础设施:不支持位图字体。您可以使用QFontDatabase::addApplicationFronFromData
,但您的字体必须可用作 TrueType 字体或 TrueType 字体集合。
解决方法是。
使用这种字体将“文本”渲染到 QImage 并使用 QML 显示。如果文本是静态的并且不经常更改,则可以。
使用 . 渲染“文本” QQuickPaintedItem
。