Класс QFontMetrics
Класс QFontMetrics предоставляет информацию о метриках шрифта. Подробнее...
| Заголовок: | #include <QFontMetrics> |
| qmake: | QT += gui |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| QFontMetrics(const QFontMetrics &fm) | |
| QFontMetrics(const QFont &font, const QPaintDevice *paintdevice) | |
| QFontMetrics(const QFont &font) | |
| QFontMetrics & | operator=(QFontMetrics &&other) |
| QFontMetrics & | operator=(const QFontMetrics &fm) |
| ~QFontMetrics() | |
| int | ascent() const |
| int | averageCharWidth() const |
| QRect | boundingRect(QChar ch) const |
| QRect | boundingRect(const QString &text) const |
| QRect | boundingRect(const QRect &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const |
| QRect | boundingRect(int x, int y, int width, int height, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const |
| int | capHeight() const |
| int | descent() const |
| QString | elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const |
| int | height() const |
| int | horizontalAdvance(const QString &text, int len = -1) const |
| int | horizontalAdvance(QChar ch) const |
| bool | inFont(QChar ch) const |
| bool | inFontUcs4(uint ucs4) const |
| int | leading() const |
| int | leftBearing(QChar ch) const |
| int | lineSpacing() const |
| int | lineWidth() const |
| int | maxWidth() const |
| int | minLeftBearing() const |
| int | minRightBearing() const |
| int | overlinePos() const |
| int | rightBearing(QChar ch) const |
| QSize | size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const |
| int | strikeOutPos() const |
| void | swap(QFontMetrics &other) |
| QRect | tightBoundingRect(const QString &text) const |
| int | underlinePos() const |
| int | xHeight() const |
| bool | operator!=(const QFontMetrics &other) const |
| bool | operator==(const QFontMetrics &other) const |
Подробное описание
QFontMetrics функции вычисляют размер символов и строк для заданного шрифта. Существует три способа создания объекта QFontMetrics:
- Вызов конструктора QFontMetrics с QFont создаёт объект метрик шрифта для совместимого со экраном шрифта, то есть шрифт не может быть шрифтом принтера. Если шрифт позже изменится, объект метрик шрифта не будет обновлён.
(Примечание: Если вы используете шрифт принтера, возвращаемые значения могут быть неточными. Шрифты принтера не всегда доступны, поэтому используется ближайший шрифт экрана, если был предоставлен шрифт принтера.)
- QWidget::fontMetrics() возвращает метрики шрифта для шрифта виджета. Это эквивалентно QFontMetrics(widget->font()). Если шрифт виджета позже изменится, объект метрик шрифта не будет обновлён.
- QPainter::fontMetrics() возвращает метрики шрифта для текущего шрифта рисовальщика. Если шрифт рисовальщика позже изменится, объект метрик шрифта не будет обновлён.
После создания объект предоставляет функции для доступа к отдельным метрикам шрифта, его символов и для строк, отображаемых в шрифте.
Существуют несколько функций, которые работают со шрифтом: ascent(), descent(), height(), leading() и lineSpacing() возвращают основные свойства размера шрифта. Функции underlinePos(), overlinePos(), strikeOutPos() и lineWidth() возвращают свойства линии, которая подчеркивает, перечеркивает или вычеркивает символы. Эти функции быстрые.
Также есть несколько функций, которые работают со множеством глифов в шрифте: minLeftBearing(), minRightBearing() и maxWidth(). Они по необходимости медленные, и мы рекомендуем избегать их, если это возможно.
Для каждого символа вы можете получить его ширину, leftBearing() и rightBearing() и узнать, содержится ли он в шрифте, используя inFont(). Вы также можете рассматривать символ как строку и использовать функции строк для него.
Функции строк включают width(), чтобы вернуть ширину строки в пикселях (или пунктах, для принтера), boundingRect(), чтобы вернуть прямоугольник, достаточно большой, чтобы содержать отображаемую строку, и size(), чтобы вернуть размер этого прямоугольника.
Пример:
QFont font("times", 24);
QFontMetrics fm(font);
int pixelsWide = fm.horizontalAdvance("What's the width of this text?");
int pixelsHigh = fm.height(); См. также QFont, QFontInfo, QFontDatabase и Пример карты символов.
Документация по функциям-членам
QFontMetrics::QFontMetrics(const QFontMetrics &fm)
Создает копию fm.
QFontMetrics::QFontMetrics(const QFont &font, const QPaintDevice *paintdevice)
Создает объект метрик шрифта для font и paintdevice.
Метрики шрифта будут совместимы с переданным устройством отрисовки. Если paintdevice равен 0, метрики будут совместимы с экраном, т.е. такими, как вы получите, если используете шрифт для отрисовки текста на виджетах или пиксельных изображениях, а не на QPicture или QPrinter.
Объект метрик шрифта содержит информацию о шрифте, переданном в конструктор на момент его создания, и не обновляется, если атрибуты шрифта изменяются позднее.
Эта функция была добавлена в Qt 5.13.
QFontMetrics::QFontMetrics(const QFont &font)
Создает объект метрик шрифта для font.
Метрики шрифта будут совместимы с устройством отрисовки, используемым для создания font.
Объект метрик шрифта содержит информацию о шрифте, переданном в конструктор на момент его создания, и не обновляется, если атрибуты шрифта изменяются позднее.
Используйте QFontMetrics(const QFont &, QPaintDevice *) для получения метрик шрифта, совместимых с определенным устройством отрисовки.
QFontMetrics &QFontMetrics::operator=(QFontMetrics &&other)
Перемещающее присваивание other данному экземпляру QFontMetrics.
Эта функция была добавлена в Qt 5.2.
QFontMetrics &QFontMetrics::operator=(const QFontMetrics &fm)
Присваивает метрики шрифта fm.
QFontMetrics::~QFontMetrics()
Уничтожает объект метрик шрифта и освобождает все выделенные ресурсы.
int QFontMetrics::ascent() const
Возвращает восходящую составляющую шрифта.
Восходящая составляющая шрифта — это расстояние от базовой линии до наивысшей позиции, до которой доходят символы. На практике некоторые дизайнеры шрифтов нарушают это правило, например, при добавлении нескольких диакритических знаков над символом или для размещения необычного символа в экзотическом языке, поэтому возможно (хотя и редко), что это значение будет слишком малым.
См. также descent().
int QFontMetrics::averageCharWidth() const
Возвращает среднюю ширину глифов в шрифте.
Эта функция была добавлена в Qt 4.2.
QRect QFontMetrics::boundingRect(QChar ch) const
Возвращает прямоугольник, покрываемый чернилами, если символ ch должен быть нарисован в начале координатной системы.
Обратите внимание, что ограничивающий прямоугольник может выходить влево от (0, 0) (например, для наклонного шрифта), и что вывод текста может занимать все пиксели в ограничивающем прямоугольнике. Для пробела прямоугольник, как правило, пуст.
Обратите внимание, что прямоугольник обычно простирается как над, так и под базовой линией.
Предупреждение: Ширина возвращаемого прямоугольника не является шириной продвижения символа. Используйте boundingRect(const QString &) или horizontalAdvance() вместо этого.
См. также width().
QRect QFontMetrics::boundingRect(const QString &text) const
Возвращает ограничивающий прямоугольник символов в строке, заданной text. Ограничивающий прямоугольник всегда охватывает по крайней мере набор пикселей, которые текст бы занимал, если бы был нарисован в (0, 0).
Обратите внимание, что ограничивающий прямоугольник может выходить влево от (0, 0), например, для наклонного шрифта, и что ширина возвращаемого прямоугольника может отличаться от возвращаемого методом width().
Если вам нужна ширина продвижения строки (для выравнивания набора строк рядом друг с другом), используйте horizontalAdvance() вместо этого.
Символы новой строки обрабатываются как обычные символы, а не как разрывы строк.
Высота ограничивающего прямоугольника не меньше значения, возвращаемого height().
См. также width(), height(), QPainter::boundingRect() и tightBoundingRect().
QRect QFontMetrics::boundingRect(const QRect &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
Это перегруженная функция.
Возвращает ограничивающий прямоугольник символов в строке, заданной text, который является набором пикселей, которые текст бы занимал, если бы был нарисован в (0, 0). Отрисовка, и, следовательно, ограничивающий прямоугольник, ограничены прямоугольником rect.
Аргумент flags — это побитовое ИЛИ следующих флагов:
- Qt::AlignLeft выравнивает по левому краю, за исключением арабского и иврита, где выравнивание по правому краю.
- Qt::AlignRight выравнивает по правому краю, за исключением арабского и иврита, где выравнивание по левому краю.
- Qt::AlignJustify выравнивает текст по ширине.
- Qt::AlignHCenter выравнивает по горизонтали по центру.
- Qt::AlignTop выравнивает по верхнему краю.
- Qt::AlignBottom выравнивает по нижнему краю.
- Qt::AlignVCenter выравнивает по вертикали по центру
-
Qt::AlignCenter (==
Qt::AlignHCenter | Qt::AlignVCenter) - Qt::TextSingleLine игнорирует символы новой строки в тексте.
- Qt::TextExpandTabs расширяет табуляции (см. ниже)
- Qt::TextShowMnemonic интерпретирует "&x" как x; т.е. подчеркнутый.
- Qt::TextWordWrap разбивает текст для вписывания в прямоугольник.
Qt::Horizontal выравнивание по умолчанию Qt::AlignLeft, а вертикальное выравнивание по умолчанию Qt::AlignTop.
Если установлено несколько флагов горизонтального или нескольких вертикального выравнивания, результат не определен.
Если установлен флаг Qt::TextExpandTabs в flags, то: если tabArray не равен null, он задает 0-терминированную последовательность пиксельных позиций для табуляции; в противном случае, если tabStops не равно нулю, оно используется как интервал табуляции (в пикселях).
Обратите внимание, что ограничивающий прямоугольник может выходить влево от (0, 0), например, для наклонного шрифта, и что вывод текста может занимать все пиксели в ограничивающем прямоугольнике.
Символы новой строки обрабатываются как разрывы строк.
Несмотря на различную фактическую высоту символов, высоты ограничивающих прямоугольников для «Да» и «да» одинаковы.
Ограничивающий прямоугольник, возвращаемый этой функцией, несколько больше, чем вычисляемый более простой функцией boundingRect(). Эта функция использует минимальное левое и правое отступы шрифта, что необходимо для правильного выравнивания многострочного текста. Кроме того, для вычисления высоты используются fontHeight() и lineSpacing(), а не высота отдельных символов.
См. также width(), QPainter::boundingRect() и Qt::Alignment.
QRect QFontMetrics::boundingRect(int x, int y, int width, int height, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
Это перегруженная функция.
Возвращает ограничивающий прямоугольник для заданного text внутри прямоугольника, заданного координатами x и y, width и height.
Если в flags установлен флаг Qt::TextExpandTabs и tabArray не равен null, он задает 0-терминированную последовательность пиксельных позиций для табуляции; в противном случае, если tabStops не равно нулю, оно используется как интервал табуляции (в пикселях).
int QFontMetrics::capHeight() const
Возвращает высоту заглавной буквы шрифта.
Высота заглавной буквы шрифта — это высота заглавной буквы над базовой линией. Конкретно, это высота заглавных букв, которые плоские — такие как H или I — в отличие от округлых букв, таких как O, или заострённых букв, таких как A, которые могут отображаться с излишком.
Эта функция была добавлена в Qt 5.8.
См. также ascent().
int QFontMetrics::descent() const
Возвращает нисходящую составляющую шрифта.
Нисходящая составляющая — это расстояние от базовой линии до самой низкой точки, до которой доходят символы. На практике некоторые дизайнеры шрифтов нарушают это правило, например, для размещения необычного символа в экзотическом языке, поэтому возможно (хотя и редко), что это значение будет слишком малым.
См. также ascent().
QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const
Если строка text шире, чем width, возвращает усечённую версию строки (т.е. строку с «…»). В противном случае возвращает исходную строку.
Параметр mode определяет, как будет усечена строка: слева (например, «…тех»), посередине (например, «Tr…ch») или справа (например, «Троль…«).
Ширина width задаётся в пикселях, а не в символах.
Аргумент flags необязателен и в настоящее время поддерживает только значение Qt::TextShowMnemonic.
Маркер усечения следует направлению вывода (layoutdirection). Например, он будет расположен справа от текста для вывода справа налево, если mode равен Qt::ElideLeft, и слева от текста, если mode равен Qt::ElideRight.
Эта функция была добавлена в Qt 4.2.
int QFontMetrics::height() const
Возвращает высоту шрифта.
Она всегда равна ascent()+descent().
См. также leading() и lineSpacing().
int QFontMetrics::horizontalAdvance(const QString &text, int len = -1) const
Возвращает горизонтальный отступ в пикселях первых len символов строки text. Если len отрицательно (по умолчанию), используется вся строка.
Это расстояние, необходимое для отрисовки последующего символа после text.
Эта функция была добавлена в Qt 5.11.
См. также boundingRect().
int QFontMetrics::horizontalAdvance(QChar ch) const
Это перегруженная функция.
Возвращает горизонтальный отступ символа ch в пикселях. Это расстояние, необходимое для отрисовки последующего символа после ch.
Некоторые метрики описаны на изображении. Центральные тёмные прямоугольники охватывают логический horizontalAdvance() каждого символа. Внешние светлые прямоугольники охватывают leftBearing() и rightBearing() каждого символа. Обратите внимание, что отступы символа «f» в этом конкретном шрифте оба отрицательные, а отступы «o» — оба положительные.
Предупреждение: Эта функция даст неверные результаты для арабских символов или неразрывных знаков посередине строки, так как форматирование и позиционирование глифов знаков при обработке строк не могут быть учтены. При реализации интерактивного текстового управления используйте QTextLayout вместо этого.
Эта функция была добавлена в Qt 5.11.
См. также boundingRect().
bool QFontMetrics::inFont(QChar ch) const
Возвращает true если символ ch является допустимым символом в шрифте; в противном случае возвращает false.
bool QFontMetrics::inFontUcs4(uint ucs4) const
Возвращает true если символ ucs4, закодированный в UCS-4/UTF-32, является допустимым символом в шрифте; в противном случае возвращает false.
int QFontMetrics::leading() const
Возвращает ведущее значение шрифта.
Это естественное межстрочное расстояние.
См. также height() и lineSpacing().
int QFontMetrics::leftBearing(QChar ch) const
Возвращает левое выравнивание символа ch в шрифте.
Левое выравнивание — это расстояние вправо от левого пикселя символа до логической точки начала символа. Это значение отрицательное, если пиксели символа простираются влево от логической точки начала.
См. width() для графического описания этой метрики.
См. также rightBearing(), minLeftBearing() и width().
int QFontMetrics::lineSpacing() const
Возвращает расстояние от одной базовой линии до следующей.
Это значение всегда равно leading()+height().
См. также height() и leading().
int QFontMetrics::lineWidth() const
Возвращает ширину подчёркнутых и зачёркнутых линий, скорректированную с учётом размера шрифта.
См. также underlinePos(), overlinePos() и strikeOutPos().
int QFontMetrics::maxWidth() const
Возвращает ширину самого широкого символа в шрифте.
int QFontMetrics::minLeftBearing() const
Возвращает минимальное левое выравнивание шрифта.
Это наименьшее значение leftBearing(char) для всех символов в шрифте.
Обратите внимание, что эта функция может быть очень медленной для больших шрифтов.
См. также minRightBearing() и leftBearing().
int QFontMetrics::minRightBearing() const
Возвращает минимальное правое выравнивание шрифта.
Это наименьшее значение rightBearing(char) для всех символов в шрифте.
Обратите внимание, что эта функция может быть очень медленной для больших шрифтов.
См. также minLeftBearing() и rightBearing().
int QFontMetrics::overlinePos() const
Возвращает расстояние от базовой линии до места, где должна быть нарисована линия надстрочного текста.
См. также underlinePos(), strikeOutPos() и lineWidth().
int QFontMetrics::rightBearing(QChar ch) const
Возвращает правое выравнивание символа ch в шрифте.
Правое выравнивание — это расстояние влево от правого пикселя символа до логической точки начала последующего символа. Это значение отрицательное, если пиксели символа простираются вправо от ширины символа.
См. width() для графического описания этой метрики.
См. также leftBearing(), minRightBearing() и width().
QSize QFontMetrics::size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
Возвращает размер text в пикселях.
Аргумент flags — это побитовое ИЛИ следующих флагов:
- Qt::TextSingleLine игнорирует символы новой строки.
- Qt::TextExpandTabs расширяет табуляцию (см. ниже)
- Qt::TextShowMnemonic интерпретирует «&x» как «x»; т.е. подчёркнуто.
- Qt::TextWordWrap разбивает текст для подгонки к прямоугольнику.
Если Qt::TextExpandTabs установлен в flags, то: если tabArray не равен null, он задаёт 0-завершённую последовательность позиций пикселей для табуляции; в противном случае, если tabStops не равно нулю, используется это значение для интервала табуляции (в пикселях).
Символы новой строки обрабатываются как разрывы строк.
Несмотря на разные фактические высоты символов, высоты ограничивающих прямоугольников «Да» и «да» одинаковы.
См. также boundingRect().
int QFontMetrics::strikeOutPos() const
Возвращает расстояние от базовой линии до места, где должна быть нарисована линия зачёркивания.
См. также underlinePos(), overlinePos() и lineWidth().
void QFontMetrics::swap(QFontMetrics &other)
Меняет местами этот экземпляр метрики шрифта с other. Эта функция очень быстрая и никогда не терпит неудачи.
Эта функция была добавлена в Qt 5.0.
QRect QFontMetrics::tightBoundingRect(const QString &text) const
Возвращает ограниченный прямоугольник, плотно охватывающий символы в строке, заданной text. Ограничительный прямоугольник всегда охватывает по крайней мере набор пикселей, которые текст займёт, если нарисован в (0, 0).
Обратите внимание, что ограничительный прямоугольник может простираться влево от (0, 0), например, для наклонных шрифтов, и что ширина возвращаемого прямоугольника может отличаться от возвращаемой методом width().
Если вам нужно узнать ширину отступа строки (для выравнивания набора строк рядом друг с другом), используйте horizontalAdvance() вместо этого.
Символы новой строки обрабатываются как обычные символы, а не как разрывы строк.
Предупреждение: Вызов этого метода очень медленный в Windows.
Эта функция была добавлена в Qt 4.3.
См. также width(), height() и boundingRect().
int QFontMetrics::underlinePos() const
Возвращает расстояние от базовой линии до места, где должна быть нарисована нижняя черта.
См. также overlinePos(), strikeOutPos() и lineWidth().
int QFontMetrics::xHeight() const
Возвращает высоту «x» шрифта. Часто, но не всегда, она равна высоте символа «x».
bool QFontMetrics::operator!=(const QFontMetrics &other) const
Возвращает true , если other не равно этому объекту; в противном случае возвращает false.
Два объекта QFontMetrics считаются равными, если они были созданы из одного и того же объекта QFont, и устройства рисования, для которых они были созданы, считаются совместимыми.
См. также operator==().
bool QFontMetrics::operator==(const QFontMetrics &other) const
Возвращает true , если other равно этому объекту; в противном случае возвращает false.
Два объекта QFontMetrics считаются равными, если они были созданы из одного и того же объекта QFont, и устройства рисования, для которых они были созданы, считаются совместимыми.
См. также operator!=().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qfontmetrics.html