Класс QRawFont
Класс QRawFont предоставляет доступ к одному физическому экземпляру шрифта. Подробнее...
| Заголовок: | #include <QRawFont> |
| qmake: | QT += gui |
| С момента: | Qt 4.8 |
Типы публичного доступа
| перечисление | AntialiasingType { PixelAntialiasing, SubPixelAntialiasing } |
| перечисление | LayoutFlag { SeparateAdvances, KernedAdvances, UseDesignMetrics } |
| флаги | 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, 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 |
Статические публичные члены
| QRawFont | fromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any) |
Связанные нечлены
| uint | qHash(const QRawFont &font, uint seed = 0) |
Подробное описание
Класс QRawFont предоставляет доступ к одному физическому экземпляру шрифта.
Примечание: QRawFont — это класс низкого уровня. Для большинства целей более подходящим классом является QFont.
Чаще всего при отображении текста в пользовательском интерфейсе точные используемые шрифты частично неизвестны. Это может быть связано с несколькими причинами: например, фактические физические шрифты на целевой системе могут быть неожиданными для разработчиков, или текст может содержать выбранные пользователем стили, размеры или системы письма, которые не поддерживаются выбранным в коде шрифтом.
END_OF_DOCUMENT_MARKERПоэтому класс 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 |
Будет применять кернинг между соседними глифами. Обратите внимание, что кернинг на основе GPOS OpenType в настоящее время не поддерживается. |
QRawFont::UseDesignMetrics |
2 |
Использовать метрики дизайна вместо настраиваемых метрик, скорректированных до разрешения устройства отрисовки. Может быть объединено с любыми из вышеперечисленных вариантов. |
Это перечисление было введено или изменено в Qt 5.1.
Тип LayoutFlags является псевдонимом для QFlags<LayoutFlag>. Он хранит результат логической операции OR значений 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, 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
Возвращает количество единиц дизайна, определяющих ширину и высоту квадрата 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.12/qrawfont.html