Класс 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.
Примечание: Когда запрашивается KernedAdvances, эта функция применит правила кернинга из таблицы TrueType KERN, если она доступна в шрифте. Во многих современных шрифтах кернинг обрабатывается с помощью правил OpenType или AAT, что требует применения полного этапа форматирования. Для получения результатов полного форматирования текста используйте QTextLayout.
Эта функция была введена в Qt 5.1.
См. также QTextLine::horizontalAdvance(), QFontMetricsF::horizontalAdvance(), и QTextLayout::glyphRuns().
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.
Примечание: Когда запрашивается KernedAdvances, эта функция применит правила кернинга из таблицы TrueType KERN, если она доступна в шрифте. Во многих современных шрифтах кернинг обрабатывается с помощью правил OpenType или AAT, что требует применения полной стадии формирования. Чтобы получить результаты полного форматирования текста, используйте QTextLayout.
Эта функция была добавлена в Qt 5.1.
См. также QTextLine::horizontalAdvance(), QFontMetricsF::horizontalAdvance() и QTextLayout::glyphRuns().
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().
[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
Преобразует строку юникодных точек в индексы глифов, используя таблицу 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
Преобразует строку юникодных точек, заданную 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().
END_OF_DOCUMENT_MARKERvoid 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
Возвращает число единиц дизайна, определяющих ширину и высоту квадрата 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.
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.2/qrawfont.html