Класс 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, так как он оптимизирует стоимость памяти кэша и также предоставляет возможность кэширования, специфичного для движка отрисовки, для дополнительного ускорения.
Документация по типам членов
перечисление 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(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 QRawFont::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.13/qrawfont.html