Класс QRawFont
Класс QRawFont обеспечивает доступ к одному физическому экземпляру шрифта. Подробнее...
| Заголовок: | #include <QRawFont> |
| qmake: | QT += gui |
| С момента версии: | Qt 4.8 |
Этот класс был введен в Qt 4.8.
Открытые типы
| enum | AntialiasingType { PixelAntialiasing, SubPixelAntialiasing } |
| enum | LayoutFlag { SeparateAdvances, KernedAdvances, UseDesignMetrics } |
| flags | LayoutFlags |
Открытые функции
| QRawFont(const QRawFont &other) | |
| QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting) | |
| QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting) | |
| QRawFont() | |
| QRawFont & | operator=(const QRawFont &other) |
| ~QRawFont() | |
| QVector<QPointF> | advancesForGlyphIndexes(const QVector<quint32> &glyphIndexes, QRawFont::LayoutFlags layoutFlags) const |
| QVector<QPointF> | advancesForGlyphIndexes(const QVector<quint32> &glyphIndexes) const |
| bool | advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const |
| bool | advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs, QRawFont::LayoutFlags layoutFlags) const |
| QImage | alphaMapForGlyph(quint32 glyphIndex, QRawFont::AntialiasingType antialiasingType = SubPixelAntialiasing, const QTransform &transform = QTransform()) const |
| qreal | ascent() const |
| qreal | averageCharWidth() const |
| QRectF | boundingRect(quint32 glyphIndex) const |
| qreal | capHeight() const |
| qreal | descent() const |
| QString | familyName() const |
| QByteArray | fontTable(const char *tagName) const |
| bool | glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const |
| QVector<quint32> | glyphIndexesForString(const QString &text) const |
| QFont::HintingPreference | hintingPreference() const |
| bool | isValid() const |
| qreal | leading() const |
| qreal | lineThickness() const |
| void | loadFromData(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) |
| void | loadFromFile(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference) |
| qreal | maxCharWidth() const |
| QPainterPath | pathForGlyph(quint32 glyphIndex) const |
| qreal | pixelSize() const |
| void | setPixelSize(qreal pixelSize) |
| QFont::Style | style() const |
| QString | styleName() const |
| QList<QFontDatabase::WritingSystem> | supportedWritingSystems() const |
| bool | supportsCharacter(QChar character) const |
| bool | supportsCharacter(uint ucs4) const |
| void | swap(QRawFont &other) |
| qreal | underlinePosition() const |
| qreal | unitsPerEm() const |
| int | weight() const |
| qreal | xHeight() const |
| bool | operator!=(const QRawFont &other) const |
| bool | operator==(const QRawFont &other) const |
Статические открытые члены
| QRawFont | fromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any) |
Связанные внешние члены
| uint | qHash(const QRawFont &font, uint seed = 0) |
Подробное описание
Примечание: QRawFont является низкоуровневым классом. В большинстве случаев QFont является более подходящим классом.
Чаще всего, при представлении текста в пользовательском интерфейсе, точные шрифты, используемые для отрисовки символов, до некоторой степени неизвестны. Это может быть по нескольким причинам: например, фактические физические шрифты, присутствующие в целевой системе, могут быть неожиданными для разработчиков, или текст может содержать выбранные пользователем стили, размеры или системы письма, которые не поддерживаются шрифтом, выбранным в коде.
Поэтому класс QFont в Qt на самом деле представляет собой запрос на шрифты. При интерпретации текста Qt сделает все возможное, чтобы сопоставить текст с запросом, но в зависимости от поддержки могут использоваться разные шрифты за кулисами.
В большинстве случаев это ожидаемо и необходимо, так как это минимизирует вероятность того, что текст в пользовательском интерфейсе будет неотображаемым. Однако в некоторых случаях может потребоваться более прямой контроль над этим процессом. Именно для таких случаев существует класс QRawFont.
Объект QRawFont представляет собой одну физическую инстанцию шрифта заданного размера в пикселях. То есть в типичном случае он представляет собой набор таблиц шрифта TrueType или OpenType и использует заданный пользователем размер пикселей для преобразования метрик в логические единицы пикселей. Он может использоваться в сочетании с классом QGlyphRun для отрисовки конкретных индексов глифов в определённых позициях, а также имеет методы доступа к некоторым релевантным данным в физическом шрифте.
QRawFont поддерживает только основные технологии шрифтов: GDI и DirectWrite на платформах Windows, FreeType на платформах Linux и CoreText на macOS. Для других механизмов шрифтов API будут отключены.
QRawFont может быть создан несколькими способами:
- Он может быть создан, вызвав QTextLayout::glyphs() или QTextFragment::glyphs(). Возвращаемые объекты QGlyphs будут содержать объекты QRawFont, представляющие фактические шрифты, используемые для отрисовки каждой части текста.
- Он может быть создан путём передачи объекта QFont в метод QRawFont::fromFont(). Функция вернёт объект QRawFont, представляющий шрифт, который будет выбран в ответ на запрос QFont и выбранной системой письма.
- Он может быть создан путём непосредственной передачи имени файла или QByteArray в конструктор QRawFont или вызовом loadFromFile() или loadFromData(). В этом случае шрифт не будет зарегистрирован в QFontDatabase и не будет доступен в рамках обычного выбора шрифтов.
QRawFont считается локальным для потока, в котором он создан (либо с помощью конструктора, либо путём вызова loadFromData() или loadFromFile()). QRawFont не может быть перемещён в другой поток, а должен быть воссоздан в нужном потоке.
Примечание: Для кэширования индексов глифов и выборов шрифтов для статического текста, чтобы избежать переформирования и переопределения макета во внутреннем цикле приложения, лучшим выбором является класс QStaticText, поскольку он оптимизирует затраты памяти кэша, а также предоставляет возможность использовать кэши, специфичные для движка отрисовки, для дополнительного ускорения.
Документация типов членов
enum QRawFont::AntialiasingType
Этот перечисление представляет собой различные способы растрирования глифа в функции alphaMapForGlyph().
| Константа | Значение | Описание |
|---|---|---|
QRawFont::PixelAntialiasing |
0 |
Будет растрировать, измеряя покрытие формы на целых пикселях. Возвращаемое изображение содержит альфа-значения каждого пикселя, основанные на покрытии формы глифа. |
QRawFont::SubPixelAntialiasing |
1 |
Будет растрировать, измеряя покрытие каждого субпикселя, возвращая отдельное альфа-значение для каждого из красного, зелёного и синего компонентов каждого пикселя. |
enum QRawFont::LayoutFlagflags QRawFont::LayoutFlags
Это перечисление указывает функции advancesForGlyphIndexes() способ вычисления продвижений.
| Константа | Значение | Описание |
|---|---|---|
QRawFont::SeparateAdvances |
0 |
Будет вычислять продвижение для каждого глифа отдельно. |
QRawFont::KernedAdvances |
1 |
Будет применять кернинг между смежными глифами. Обратите внимание, что кернинг, основанный на OpenType GPOS, в настоящее время не поддерживается. |
QRawFont::UseDesignMetrics |
2 |
Использовать метрики дизайна вместо метрик с учётом наклона, откорректированных до разрешения устройства отрисовки. Может быть объединено с любым из указанных выше вариантов. |
Это перечисление было добавлено или изменено в Qt 5.1.
Тип LayoutFlags является типом-синонимом для QFlags<LayoutFlag>. Он хранит логическое ИЛИ комбинацию значений LayoutFlag.
Документация функций членов
QRawFont::QRawFont(const QRawFont &other)
Создаёт QRawFont, являющийся копией other.
QRawFont::QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting)
Создаёт QRawFont, представляющий шрифт, содержащийся в переданных данных fontData для размера (в пикселях), заданного pixelSize, и используя предпочтения наклона, заданные hintingPreference.
Примечание: Данные должны содержать шрифт TrueType или OpenType.
QRawFont::QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting)
Создаёт QRawFont, представляющий шрифт, содержащийся в файле, на который указывает fileName, для размера (в пикселях), заданного pixelSize, и используя предпочтения наклона, заданные hintingPreference.
Примечание: Ссылаемый файл должен содержать шрифт TrueType или OpenType.
QRawFont::QRawFont()
Создаёт недействительный QRawFont.
QRawFont &QRawFont::operator=(const QRawFont &other)
Присваивает other этому QRawFont.
QRawFont::~QRawFont()
Уничтожает QRawFont
QVector<QPointF> QRawFont::advancesForGlyphIndexes(const QVector<quint32> &glyphIndexes, QRawFont::LayoutFlags layoutFlags) const
Возвращает продвижения QRawFont для каждого из glyphIndexes в пиксельных единицах. Продвижения задают расстояние от позиции заданного глифа до позиции, куда должен быть нарисован следующий глиф, чтобы создать впечатление, что два глифа не имеют пробела. Способ вычисления продвижений контролируется layoutFlags.
Эта функция была добавлена в Qt 5.1.
См. также QTextLine::horizontalAdvance() и QFontMetricsF::width().
QVector<QPointF> QRawFont::advancesForGlyphIndexes(const QVector<quint32> &glyphIndexes) const
Это перегруженная функция.
Возвращает продвижения QRawFont для каждого из glyphIndexes в пиксельных единицах. Продвижения задают расстояние от позиции заданного глифа до позиции, куда должен быть нарисован следующий глиф, чтобы создать впечатление, что два глифа не имеют пробела. Продвижение каждого глифа вычисляется отдельно.
См. также QTextLine::horizontalAdvance() и QFontMetricsF::width().
bool QRawFont::advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const
Это перегруженная функция.
Возвращает продвижения QRawFont для каждого из glyphIndexes в пиксельных единицах. Продвижения задают расстояние от позиции заданного глифа до позиции, куда должен быть нарисован следующий глиф, чтобы создать впечатление, что два глифа не имеют пробела. Индексы глифов передаются с массивом glyphIndexes, а результаты возвращаются через advances, оба из них должны иметь numGlyphs элементов. Продвижение каждого глифа вычисляется отдельно.
См. также QTextLine::horizontalAdvance() и QFontMetricsF::width().
bool QRawFont::advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs, QRawFont::LayoutFlags layoutFlags) const
Возвращает продвижения QRawFont для каждого из glyphIndexes в пиксельных единицах. Продвижения задают расстояние от позиции заданного глифа до позиции, куда должен быть нарисован следующий глиф, чтобы создать впечатление, что два глифа не имеют пробела. Индексы глифов передаются с массивом glyphIndexes, а результаты возвращаются через advances, оба из них должны иметь numGlyphs элементов. Способ вычисления продвижений контролируется layoutFlags.
Эта функция была добавлена в Qt 5.1.
См. также QTextLine::horizontalAdvance() и QFontMetricsF::width().
QImage QRawFont::alphaMapForGlyph(quint32 glyphIndex, QRawFont::AntialiasingType antialiasingType = SubPixelAntialiasing, const QTransform &transform = QTransform()) const
Эта функция возвращает растровое изображение глифа по заданному glyphIndex в базовом шрифте, используя указанное преобразование transform. Если QRawFont недействителен, функция вернёт недействительную QImage.
Если шрифт цветной, то результирующее изображение будет содержать отрисованный глиф при текущем размере пикселя. В этом случае antialiasingType будет проигнорирован.
В противном случае, если antialiasingType установлен в QRawFont::SubPixelAntialiasing, результирующее изображение будет в формате QImage::Format_RGB32, и значения RGB каждого пикселя будут представлять субпиксельные значения непрозрачности пикселя в растровом изображении глифа. В противном случае, изображение будет в формате QImage::Format_Indexed8, и каждый пиксель будет содержать непрозрачность пикселя в растровом изображении.
См. также pathForGlyph() и QPainter::drawGlyphRun().
qreal QRawFont::ascent() const
Возвращает восходящую часть этого QRawFont в единицах пикселей.
Восходящая часть шрифта — это расстояние от базовой линии до наивысшей позиции, до которой доходят символы. На практике некоторые дизайнеры шрифтов нарушают это правило, например, когда они помещают на символ более одного диакритического знака или для размещения необычного символа в экзотическом языке, поэтому возможно (хотя и редко), что это значение будет слишком маленьким.
См. также QFontMetricsF::ascent().
qreal QRawFont::averageCharWidth() const
Возвращает среднюю ширину символа этого QRawFont в единицах пикселей.
См. также QFontMetricsF::averageCharWidth().
QRectF QRawFont::boundingRect(quint32 glyphIndex) const
Возвращает наименьший прямоугольник, содержащий глиф с заданным glyphIndex.
Эта функция была добавлена в Qt 5.0.
qreal QRawFont::capHeight() const
Возвращает высоту заглавной буквы этого QRawFont в единицах пикселей.
Высота заглавной буквы шрифта — это высота заглавной буквы над базовой линией. Конкретно, это высота заглавных букв, которые являются плоскими — например, H или I — в отличие от округлённых букв, таких как O, или заострённых букв, таких как A, которые могут отображаться с переходом.
Эта функция была добавлена в Qt 5.8.
См. также QFontMetricsF::capHeight().
qreal QRawFont::descent() const
Возвращает нисходящую часть этого QRawFont в единицах пикселей.
Нисходящая часть — это расстояние от базовой линии до самой низкой точки, до которой доходят символы. На практике некоторые дизайнеры шрифтов нарушают это правило, например, для размещения необычного символа в экзотическом языке, поэтому возможно (хотя и редко), что это значение будет слишком маленьким.
См. также QFontMetricsF::descent().
QString QRawFont::familyName() const
Возвращает имя семейства шрифтов этого QRawFont.
QByteArray QRawFont::fontTable(const char *tagName) const
Извлекает таблицу sfnt с именем tagName из базового физического шрифта или пустой массив байтов, если такая таблица не найдена. Порядок байтов возвращаемой таблицы шрифта — Big Endian, как это определено в формате sfnt. tagName должен иметь длину четыре символа и должен быть отформатирован в соответствии с естественным порядком байтов текущей платформы.
[static] QRawFont QRawFont::fromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any)
Извлекает физическое представление на основе запроса font. Физический шрифт, возвращаемый функцией, является предпочтительным для Qt для отображения текста в выбранном writingSystem.
Предупреждение: Эта функция потенциально ресурсоёмкая и не должна вызываться в критичных к производительности участках кода.
bool QRawFont::glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const
Преобразует строку юникодовых точек в индексы глифов, используя таблицу CMAP в базовом шрифте. Функция работает как glyphIndexesForString(), за исключением того, что она принимает массив (chars), результаты возвращаются через массив glyphIndexes, а количество глифов устанавливается в numGlyphs. Размер массива glyphIndexes должен быть не меньше numChars. Если этого недостаточно, функция вернёт false, затем вы можете изменить размер glyphIndexes на размер, возвращённый в numGlyphs.
См. также glyphIndexesForString(), advancesForGlyphIndexes(), QGlyphRun, QTextLayout::glyphRuns(), и QTextFragment::glyphRuns().
QVector<quint32> QRawFont::glyphIndexesForString(const QString &text) const
Преобразует строку юникодовых точек, заданную text, в индексы глифов, используя таблицу CMAP в базовом шрифте, и возвращает вектор, содержащий результат.
Обратите внимание, что в случаях, когда в шрифте есть другие таблицы, влияющие на форматирование текста, возвращаемые индексы глифов не будут правильно представлять отображение текста. Для получения правильно отформатированного текста вы можете использовать QTextLayout для выравнивания и форматирования текста, а затем вызвать QTextLayout::glyphs() для получения набора пар списков индексов глифов и QRawFont.
См. также advancesForGlyphIndexes(), glyphIndexesForChars(), QGlyphRun, QTextLayout::glyphRuns(), и QTextFragment::glyphRuns().
QFont::HintingPreference QRawFont::hintingPreference() const
Возвращает предпочтение керового форматирования, используемое для построения этого QRawFont.
См. также QFont::hintingPreference().
bool QRawFont::isValid() const
Возвращает true если QRawFont действителен, и false в противном случае.
qreal QRawFont::leading() const
Возвращает интерлинию этого QRawFont в единицах пикселей.
Это естественное межстрочное расстояние.
См. также QFontMetricsF::leading().
qreal QRawFont::lineThickness() const
Возвращает толщину для рисования линий (подчёркивания, надчёркивания и т. п.) вместе с текстом, нарисованным этим шрифтом.
void QRawFont::loadFromData(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference)
Заменяет текущий QRawFont шрифтом, содержащимся в предоставленных fontData, для размера (в пикселях), заданного pixelSize, и с использованием предпочтения керового форматирования, заданного hintingPreference.
fontData должна содержать шрифт TrueType или OpenType.
См. также loadFromFile().
void QRawFont::loadFromFile(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference)
Заменяет текущий QRawFont содержимым файла, указанного fileName, для размера (в пикселях), заданного pixelSize, и с использованием предпочтения керового форматирования, заданного hintingPreference.
Файл должен содержать шрифт TrueType или OpenType.
См. также loadFromData().
qreal QRawFont::maxCharWidth() const
Возвращает ширину самого широкого символа в шрифте.
См. также QFontMetricsF::maxWidth().
QPainterPath QRawFont::pathForGlyph(quint32 glyphIndex) const
Эта функция возвращает форму глифа с заданным glyphIndex в базовом шрифте, если QRawFont действителен. В противном случае возвращается пустая QPainterPath.
Возвращаемый глиф всегда будет без начертаний.
См. также alphaMapForGlyph() и QPainterPath::addText().
qreal QRawFont::pixelSize() const
Возвращает размер в пикселях, установленный для этого QRawFont. Размер в пикселях влияет на то, как растрируются глифы, на размер глифов, возвращаемых методом pathForGlyph(), и используется для преобразования внутренних метрик из единиц дизайна в логические единицы пикселей.
См. также setPixelSize().
void QRawFont::setPixelSize(qreal pixelSize)
Устанавливает размер в пикселях, с которым этот шрифт должен отображаться, в pixelSize.
См. также pixelSize().
QFont::Style QRawFont::style() const
Возвращает стиль этого QRawFont.
См. также QFont::style().
QString QRawFont::styleName() const
Возвращает имя стиля этого QRawFont.
См. также QFont::styleName().
QList<QFontDatabase::WritingSystem> QRawFont::supportedWritingSystems() const
Возвращает список систем письма, поддерживаемых шрифтом в соответствии с информацией, предоставленной разработчиком шрифта в файле шрифта. Обратите внимание, что это не гарантирует поддержку конкретной точки Юникода в шрифте. Вы можете использовать метод supportsCharacter() для проверки поддержки отдельного, конкретного символа.
Примечание: Список определяется на основе диапазонов Юникода и диапазонов кодовых страниц, заданных в таблице OS/2 шрифта, и требует наличия такой таблицы в файле шрифта.
См. также supportsCharacter().
bool QRawFont::supportsCharacter(QChar character) const
Возвращает true, если шрифт имеет глиф, соответствующий заданному символу character.
См. также supportedWritingSystems().
bool QRawFont::supportsCharacter(uint ucs4) const
Это перегруженный метод.
Возвращает true, если шрифт имеет глиф, соответствующий символу UCS-4 в кодировке ucs4.
См. также supportedWritingSystems().
void QRawFont::swap(QRawFont &other)
Меняет местами этот шрифт с other. Эта функция очень быстрая и никогда не терпит неудач.
Эта функция была добавлена в Qt 5.0.
qreal QRawFont::underlinePosition() const
Возвращает положение от базовой линии для рисования подчеркиваний под текстом, нарисованным этим шрифтом.
qreal QRawFont::unitsPerEm() const
Возвращает количество единиц дизайна, определяющих ширину и высоту квадратного ема для этого QRawFont. Это значение используется вместе с размером в пикселях при преобразовании метрик дизайна в единицы пикселей, так как внутренние метрики задаются в единицах дизайна, а размер в пикселях указывает размер 1 ема в пикселях.
См. также pixelSize() и setPixelSize().
int QRawFont::weight() const
Возвращает вес этого QRawFont.
См. также QFont::weight().
qreal QRawFont::xHeight() const
Возвращает xHeight этого QRawFont в единицах пикселей.
Это часто, но не всегда, то же самое, что и высота символа 'x'.
См. также QFontMetricsF::xHeight().
bool QRawFont::operator!=(const QRawFont &other) const
Возвращает true, если этот QRawFont не равен other. В противном случае возвращает false.
bool QRawFont::operator==(const QRawFont &other) const
Возвращает true, если этот QRawFont равен other. В противном случае возвращает false.
Связанные нечленные функции
uint qHash(const QRawFont &font, uint seed = 0)
Возвращает значение хэша для font. Если указано, seed используется для инициализации хэша.
Эта функция была добавлена в Qt 5.8.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qrawfont.html