Класс QRawFont
Класс QRawFont предоставляет доступ к отдельному физическому экземпляру шрифта. Подробнее...
| Заголовок: | #include <QRawFont> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Открытые типы
| 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() | |
| QList<QPointF> | advancesForGlyphIndexes(const QList<quint32> &glyphIndexes, QRawFont::LayoutFlags layoutFlags) const |
| QList<QPointF> | advancesForGlyphIndexes(const QList<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 |
| QList<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) |
Связанные внешние члены
| size_t | qHash(const QRawFont &font, size_t 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, так как он оптимизирует стоимость памяти кэша и также предоставляет возможность кэширования, специфичного для движка рисования, для дополнительного повышения скорости.
Документация по типам элементов-членов
перечисление QRawFont::AntialiasingType
Это перечисление представляет различные способы растрирования глифа в функции alphaMapForGlyph().
| Константа | Значение | Описание |
|---|---|---|
QRawFont::PixelAntialiasing |
0 |
Будет растрировать, измеряя охват формы на целых пикселях. Возвращаемое изображение содержит альфа-значения каждого пикселя, основанные на охвате формы глифа. |
QRawFont::SubPixelAntialiasing |
1 |
Будет растрировать, измеряя охват каждого субпикселя, возвращая отдельные альфа-значения для каждого из компонентов красного, зеленого и синего цветов каждого пикселя. |
[since 5.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(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.
[since 5.1] QList<QPointF> QRawFont::advancesForGlyphIndexes(const QList<quint32> &glyphIndexes, QRawFont::LayoutFlags layoutFlags) const
Возвращает отступы QRawFont для каждого из glyphIndexes в единицах пикселей. Отступы задают расстояние от позиции данного глифа до позиции, где должен быть нарисован следующий глиф, чтобы создать видимость, как будто два глифа неразрывны. Способ вычисления отступов контролируется layoutFlags.
Эта функция была введена в Qt 5.1.
См. также QTextLine::horizontalAdvance() и QFontMetricsF::horizontalAdvance().
QList<QPointF> QRawFont::advancesForGlyphIndexes(const QList<quint32> &glyphIndexes) const
Это перегруженная функция.
Возвращает отступы QRawFont для каждого из glyphIndexes в единицах пикселей. Отступы задают расстояние от позиции данного глифа до позиции, где должен быть нарисован следующий глиф, чтобы создать видимость, как будто два глифа неразрывны. Отступ каждого глифа вычисляется отдельно.
См. также QTextLine::horizontalAdvance() и QFontMetricsF::horizontalAdvance().
bool QRawFont::advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const
Это перегруженная функция.
Возвращает отступы QRawFont для каждого из glyphIndexes в единицах пикселей. Отступы задают расстояние от позиции данного глифа до позиции, где должен быть нарисован следующий глиф, чтобы создать видимость, как будто два глифа неразрывны. Индексы глифов задаются с помощью массива glyphIndexes, а результаты возвращаются через advances; оба массива должны содержать numGlyphs элементов. Отступ каждого глифа вычисляется отдельно.
См. также QTextLine::horizontalAdvance() и QFontMetricsF::horizontalAdvance().
[since 5.1] 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::horizontalAdvance().
END_OF_DOCUMENT_MARKERQImage 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().
[since 5.0] QRectF QRawFont::boundingRect(quint32 glyphIndex) const
Возвращает наименьший прямоугольник, содержащий глиф с заданным glyphIndex.
Эта функция была добавлена в Qt 5.0.
[since 5.8] 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
Преобразует строку кодовых точек Unicode в индексы глифов, используя таблицу CMAP в базовом шрифте. Функция работает так же, как glyphIndexesForString(), за исключением того, что она принимает массив (chars), результаты будут возвращены через массив glyphIndexes, а количество глифов будет установлено в numGlyphs. Размер массива glyphIndexes должен быть по крайней мере numChars. Если этого недостаточно, функция вернёт false, после чего вы можете изменить размер glyphIndexes на размер, возвращённый в numGlyphs.
См. также glyphIndexesForString(), advancesForGlyphIndexes(), QGlyphRun, QTextLayout::glyphRuns(), и QTextFragment::glyphRuns().
QList<quint32> QRawFont::glyphIndexesForString(const QString &text) const
Преобразует строку кодовых точек Unicode, заданную 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().
[since 5.0] 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.
Связанные нечленные элементы
[since 5.8] size_t qHash(const QRawFont &font, size_t 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-6.0/qrawfont.html