繁体   English   中英

Qt Quick QML中的位图字体

[英]Bitmap fonts in Qt Quick QML

我有一个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字体集合。

解决方法是。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM