返回介绍

Fonts in Qt/Embedded

发布于 2019-10-04 14:57:55 字数 6678 浏览 943 评论 0 收藏 0

Supported Formats

Qt/Embedded supports four font formats:

  • TrueType (TTF) - the scalable font technology now standard
    on MS-Windows and Apple Macintosh, and becoming popular on X11.

  • Postscript Type1 (PFA/PFB) - scalable fonts often used by printers,
    also popular on X11. These are similar in functionality to TTF
    fonts and are not discussed further in this document.

  • Bitmap Distribution Format fonts (BDF) - a standard format
    for non-scalable fonts. A large number of BDF fonts are
    supplied as part of standard X11 distributions - most of
    these can be used with Qt/Embedded. You should not
    use these in a production system: they are very slow to
    load and take up a lot of storage space. Instead,
    render the BDF to a QPF.

  • Qt Prerendered Font (QPF) - a light-weight non-scalable font
    format specific to Qt/Embedded.

Support for each of these font formats, except QPF which is always
enabled, can be enabled or disabled independently by using the Qt/Embedded Features Definition. There is
support in Qt/Embedded for writing a QPF font file from any font, thus
you can initially enable TTF and BDF formats, save QPF files for the
fonts and sizes you need, then remove TTF and BDF support.

See tools/makeqpf for a tool that helps
produce QPF files from the TTF and BDF, or just run your application
with the -savefonts option.

Memory Requirements

With TTF fonts, each character in the font at a given point size is
only rendered when first used in a drawing or metrics operation. With
BDF fonts all characters are rendered when the font is used.
With QPF fonts, the characters are stored in the same format as Qt uses
when drawing.

For example, a 10-point Times font containing the ASCII characters uses
around 1300 bytes when stored in QPF format.

Taking advantage of the way the QPF format is structured, Qt/Embedded
memory-maps the data rather than reading and parsing it.
This reduces RAM consumption even further.

Scalable fonts use a larger amount of memory per font, but
these fonts provide a memory saving if many different sizes of each
font are needed.

Smooth Fonts

TTF, PFA, and QPF fonts can be rendered as smooth anti-aliased
fonts to give superior readability, especially on low-resolution
devices. The difference between smooth and non-smooth fonts is
illustrated below (you may need to change your display to low
resolution to see the difference):

unsmooth

smooth

In Qt/Embedded 2.2.1, smooth fonts use 8 times as much memory as non-smooth
fonts. This multiplier will be reduced to a configurable
2 or 4 (ie. 4-level and 16-level shading rather than the current excessive
256-level shading).

Unicode

All fonts used by Qt/Embedded use the Unicode character encoding.
Most fonts available today use this encoding, but they usually don't
contain all the Unicode characters. A complete 16-point Unicode
font uses over 1 MB of memory.

The font definition file

When Qt/Embedded applications run, they look for a file called
$QTDIR/lib/fonts/fontdir or
/usr/local/qt-embedded/lib/fonts/fontdir. This file defines the
fonts available to the application. It has the following format:

name file renderer italic weight size flags

where

Field

Value

name

Helvetica, Times, etc.

file

helvR0810.bdf, verdana.ttf, etc.

renderer

BDF or FT

italic

y or n

weight

50 is normal, 75 is bold, etc.

size

0 for scalable or pointsize times 10 (e.g., 120
for 12pt)

flags

  • s: smooth (anti-aliased)
  • u: unicode range when saving (default is Latin-1)
  • a: ascii range when saving (default is Latin-1)

The font definition file does not specify QPF fonts; these are loaded
directly from the directory containing the fontdir file, and must
be named name_size_weightitalicflag.qpf, where

Field

Value

name

helvetica, times, etc. (in lowercase)

size

pointsize times 10 (e.g., 120 for 12pt)

italicflag

i for italic, otherwise nothing.

weight

50 is normal, 75 is bold, etc.

If an application is run with the -savefonts command-line option,
then whenever a font other than a QPF font is used, a corresponding QPF file
is saved. This allows you to easily find the font usage of your applications
and to generate QPF files so that you can eventually reduce the memory
usage of your applications by disabling TTF and BDF support from Qt/Embedded,
or by modifying the initialization of qws_savefonts in
kernel/qapplication_qws.cpp of the Qt/Embedded library source code.
In extreme cases of memory-saving, it is possible to save partially-rendered
fonts (eg. only the characters in "Product NameTM") if you are
certain that these are the only characters you will need from the font.
See QMemoryManager::savePrerenderedFont() for this functionality.

Notes

The font definition file, naming conventions for font files, and the format
of QPF files may change in versions of Qt/Embedded after 2.2.1.

When enabled, Qt/Embedded uses the powerful FreeType2 library to implement
TrueType and Type1 support.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文