Класс 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, 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 |
| 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. Для других шрифтовых back-end API будут отключены.
QRawFont может быть создан несколькими способами:
- Он может быть создан путём вызова QTextLayout::glyphs() или QTextFragment::glyphs(). Возвращаемые объекты QGlyphs будут содержать объекты QRawFont, которые представляют фактические шрифты, используемые для рендеринга каждой части текста.
- Он может быть создан путём передачи объекта QFont в QRawFont::fromFont(). Функция вернёт объект QRawFont, представляющий шрифт, который будет выбран в ответ на запрос QFont и выбранную систему письма.
- Он может быть создан путём передачи имени файла или QByteArray непосредственно в конструктор QRawFont, или путём вызова loadFromFile() или loadFromData(). В этом случае шрифт не будет зарегистрирован в QFontDatabase, и он не будет доступен как часть обычного выбора шрифтов.
QRawFont считается локальным для потока, в котором он был создан (либо с помощью конструктора, либо путём вызова loadFromData() или loadFromFile()). QRawFont нельзя переместить в другой поток, но его необходимо будет пересоздать в данном потоке.
Примечание: Для требования к кэшированию индексов глифов и выбору шрифтов для статического текста, чтобы избежать повторной форматировки и переразметки во внутреннем цикле приложения, лучшим выбором является класс QStaticText, так как он оптимизирует затраты памяти кэша и также предоставляет возможность кэширования, специфичного для движка рисования, для дополнительного ускорения.
Документация по типам членов
enum QRawFont::AntialiasingType
Этот перечисление представляет собой разные способы растрирования глифа в функции alphaMapForGlyph().
| Константа | Значение | Описание |
|---|---|---|
QRawFont::PixelAntialiasing |
0 |
Будет растрировать, измеряя покрытие формы на целых пикселях. Возвращаемое изображение содержит значения альфа каждого пикселя, основанные на покрытии формы глифа. |
QRawFont::SubPixelAntialiasing |
1 |
Будет растрировать, измеряя покрытие каждого субпикселя, возвращая отдельное значение альфа для каждого из красного, зелёного и синего компонентов каждого пикселя. |
enum QRawFont::LayoutFlagflags 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, 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
Преобразует строку кодовых точек Unicode в индексы глифов, используя таблицу 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
Преобразует строку кодовых точек 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().
END_OF_DOCUMENT_MARKERQPainterPath 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/archives/qt-5.11/qrawfont.html