2013-05-06 3 views
3

У меня есть растровое изображение png со многими «глифами», нарисованными один за другим, и текстовый файл, который связывает число ascii с положением и размером в этом растровом изображении. Глифы рисуются вручную с использованием разных цветов и уровней прозрачности.Растровые шрифты в Qt Quick QML

Как-то мне нужно открыть и использовать этот шрифт на QML. К сожалению, похоже, QML не поддерживает растровые шрифты «как есть».

Есть ли решение?

+0

Вы нашли решение на этом? – QuasarDonkey

+0

Да, да. Через несколько дней после моего вопроса я нашел очень изящное решение, но потом забыл ответить на мой собственный вопрос. Я сделаю это скоро :) – conejoroy

+0

Это было бы здорово! Я бы хотел использовать Qt для игры, над которой я работаю, но отсутствие поддержки растровых шрифтов не позволяет мне использовать ее. – QuasarDonkey

ответ

2

Я работал над решением через несколько дней после публикации этого вопроса. С тех пор, похоже, есть много людей, которые все еще пытаются использовать «растровые шрифты старой школы» в Qt Quick. Решение, которое я нашел, действительно элегантно и имеет чрезвычайно хорошие характеристики.

import QtQuick 1.1 

Row { 
    property string text: "" 
    Repeater { 
     model: text.length 
     Image { 
      source: "bitmapfont/" + text.charCodeAt(index) + ".png" 
     } 
    } 
} 

Сохранить как «TextBitmap.qml» в той же директории с вашим другим кодом QML, а затем создать подкаталог с именем шрифта («bitmapfont» в данном примере). Вам нужно будет нарисовать или вырезать каждый шрифт шрифта растрового изображения индивидуально и сохранить их в этой подпапке как отдельный .png, чье имя является Юникодом этого глифа; например bitmapfont/65.png для символа 'A', bitmapfont/66.png для символа 'B' и т. д.

Когда этот пользовательский элемент TextBitmap визуализируется в первый раз - или в любое время изменилось свойство текста - Repeater автоматически создаст элемент изображения для каждого символа в тексте, каждый из которых отобразит соответствующий .png из «bitmapfont».

Используйте это так:

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 элемент, видео о том, как он выглядит, и даже образец проекта.

Надеюсь, это поможет кому-то!

0

Это невозможно напрямую с использованием инфраструктуры шрифтов Qt: поддержка растровых шрифтов не поддерживается. Вы можете использовать QFontDatabase::addApplicationFronFromData, но тогда ваш шрифт должен быть доступен в виде шрифта TrueType или коллекции шрифтов TrueType.

Обходные пути были бы для.

  1. Извлеките «текст» с помощью такого шрифта в QImage и покажите, что с использованием QML. Это нормально, если текст статичен и не изменяется часто.

  2. Извлеките «текст» с помощью QQuickPaintedItem.

Смежные вопросы