3

我有一个 png 位图,其中一个接一个地绘制了许多“字形”,还有一个文本文件,该文件将 ascii 数字与该位图中的位置和大小相关联。字形是使用不同颜色和透明度级别手绘的。

不知何故,我需要在 QML 上打开并使用这种字体。不幸的是,QML 似乎不“按原样”支持位图字体。

有什么解决办法吗?

4

2 回答 2

2

发布此问题后几天,我一直在研究解决方案。从那时起,似乎有很多人仍在尝试在 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 元素、其外观的视频,甚至还有一个示例项目。

我希望它可以帮助某人!

于 2013-12-31T21:28:26.637 回答
0

这不能直接使用 Qt 的字体基础设施:不支持位图字体。您可以使用QFontDatabase::addApplicationFronFromData,但您的字体必须可用作 TrueType 字体或 TrueType 字体集合。

解决方法是。

  1. 使用这种字体将“文本”渲染到 QImage 并使用 QML 显示。如果文本是静态的并且不经常更改,则可以。

  2. 使用 . 渲染“文本” QQuickPaintedItem

于 2013-08-26T19:04:02.197 回答