Класс QRawFont
Класс QRawFont обеспечивает доступ к одному физическому экземпляру шрифта. Подробнее...
| Заголовок: | #include <QRawFont> |
| qmake: | QT += gui |
| С версии: | Qt 4.8 |
Открытые типы
| enum | AntialiasingType { PixelAntialiasing, SubPixelAntialiasing } |
| enum | LayoutFlag { SeparateAdvances, KernedAdvances, UseDesignMetrics } |
| flags | LayoutFlags |
Открытые функции
| QRawFont() | |
| QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting) | |
| QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting) | |
| QRawFont(const QRawFont &other) | |
| ~QRawFont() | |
| QVector<QPointF> | advancesForGlyphIndexes(const QVector<quint32> &glyphIndexes, 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, LayoutFlags layoutFlags) const |
| QImage | alphaMapForGlyph(quint32 glyphIndex, 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 |
| QRawFont & | operator=(QRawFont &&other) |
| QRawFont & | operator=(const QRawFont &other) |
| 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 обеспечивает доступ к одному физическому экземпляру шрифта.
Примечание: 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, поскольку он оптимизирует затраты памяти кэша и также предоставляет возможность кэширования для конкретного движка рисования, для дополнительного ускорения.
Документация типов членов
перечисление QRawFont::AntialiasingType
Это перечисление представляет собой различные способы растрирования глифа в функции alphaMapForGlyph().
| Постоянная | Значение | Описание |
|---|---|---|
QRawFont::PixelAntialiasing |
0 |
Будет растрировать, измеряя покрытие формы на целых пикселях. Возвращаемое изображение содержит значения альфа каждого пикселя на основе покрытия формы глифа. |
QRawFont::SubPixelAntialiasing |
1 |
Будет растрировать, измеряя покрытие каждого субпикселя, возвращая отдельное значение альфа для каждого из компонентов красного, зеленого и синего каждого пикселя. |
перечисление QRawFont::LayoutFlagфлаги QRawFont::LayoutFlags
Это перечисление сообщает функции advancesForGlyphIndexes() как вычислять отступы.
| Постоянная | Значение | Описание |
|---|---|---|
QRawFont::SeparateAdvances |
0 |
Будет вычислять отступ для каждого глифа отдельно. |
QRawFont::KernedAdvances |
1 |
Будет применять кернинг между соседними глифами. Обратите внимание, что кернинг OpenType на основе GPOS в настоящее время не поддерживается. |
QRawFont::UseDesignMetrics |
2 |
Использовать метрики дизайна вместо метрик с учетом наклона, скорректированных до разрешения устройства рисования. Может быть объединено с любыми из вышеперечисленных вариантов. |
Это перечисление было введено или изменено в Qt 5.1.
Тип LayoutFlags является типом-синонимом для QFlags<LayoutFlag>. Он хранит логическое ИЛИ сочетание значений LayoutFlag.
Документация функций членов
QRawFont::QRawFont()
Создаёт недействительный QRawFont.
QRawFont::QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting)
Создаёт QRawFont, представляющий шрифт, содержащийся в файле, на который указывает fileName, для размера (в пикселях), указанного параметром pixelSize, и используя предпочтение наклона, заданное параметром hintingPreference.
Примечание: Указанный файл должен содержать шрифт TrueType или OpenType.
QRawFont::QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting)
Создаёт QRawFont, представляющий шрифт, содержащийся в переданных данных fontData, для размера (в пикселях), указанного параметром pixelSize, и используя предпочтение наклона, заданное параметром hintingPreference.
Примечание: Данные должны содержать шрифт TrueType или OpenType.
QRawFont::QRawFont(const QRawFont &other)
Создаёт QRawFont, являющийся копией other.
QRawFont::~QRawFont()
Уничтожает QRawFont
QVector<QPointF> QRawFont::advancesForGlyphIndexes(const QVector<quint32> &glyphIndexes, 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, LayoutFlags layoutFlags) const
Возвращает отступы QRawFont для каждого из glyphIndexes в единицах пикселей. Отступы указывают расстояние от позиции данного глифа до того места, где должен быть нарисован следующий глиф, чтобы сделать вид, как будто два глифа не имеют пробелов. Индексы глифов заданы массивом glyphIndexes, а результаты возвращаются через advances, оба должны иметь numGlyphs элементов. Способ вычисления отступов контролируется параметром layoutFlags.
Эта функция была введена в Qt 5.1.
См. также QTextLine::horizontalAdvance() и QFontMetricsF::width().
QImage QRawFont::alphaMapForGlyph(quint32 glyphIndex, 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 должен иметь длину четыре символа и должен быть отформатирован в соответствии с родной endianностью текущей платформы.
[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
Возвращает количество единиц дизайна, определяющих ширину и высоту квадрата em для этого QRawFont. Это значение используется вместе с размером в пикселях для преобразования метрик дизайна в единицы пикселей, поскольку внутренние метрики задаются в единицах дизайна, а размер в пикселях задаёт размер 1 em в пикселях.
См. также 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.
QRawFont &QRawFont::operator=(QRawFont &&other)
Оператор присваивания перемещения.
QRawFont &QRawFont::operator=(const QRawFont &other)
Присваивает other этому QRawFont.
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.9/qrawfont.html