Класс QFontMetrics
Класс QFontMetrics предоставляет информацию о метриках шрифта. Подробнее...
| Заголовок: | #include <QFontMetrics> |
| qmake: | QT += gui |
Примечание: Все функции в этом классе являются перевходными.
Открытые функции
| QFontMetrics(const QFont &font) | |
| QFontMetrics(const QFont &font, QPaintDevice *paintdevice) | |
| QFontMetrics(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 |
| QFontMetrics & | operator=(const QFontMetrics &fm) |
| QFontMetrics & | operator=(QFontMetrics &&other) |
| bool | operator==(const QFontMetrics &other) const |
Подробное описание
Класс QFontMetrics предоставляет информацию о метриках шрифта.
Функции 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 QFont &font)
Создаёт объект метрик шрифта для font.
Метрики шрифта будут совместимы с устройством рисования, используемым для создания font.
Объект метрик шрифта содержит информацию о шрифте, переданном в конструктор во время его создания, и не обновляется, если атрибуты шрифта изменяются позже.
Используйте QFontMetrics(const QFont &, QPaintDevice *) для получения метрик шрифта, совместимых с определённым устройством рисования.
QFontMetrics::QFontMetrics(const QFont &font, QPaintDevice *paintdevice)
Создаёт объект метрик шрифта для font и paintdevice.
Метрики шрифта будут совместимы с переданным устройством рисования. Если paintdevice равен 0, метрики будут совместимы с экраном, т.е. метрики, которые вы получите, если используете шрифт для рисования текста на виджетах или пиксельмапах, а не на QPicture или QPrinter.
Объект метрик шрифта содержит информацию о шрифте, переданном в конструктор во время его создания, и не обновляется, если атрибуты шрифта изменяются позже.
QFontMetrics::QFontMetrics(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, он задаёт последовательность положений в пикселях для табуляции; в противном случае, если 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.
Если Qt::TextExpandTabs установлено в flags и tabArray не равен null, он задаёт последовательность положений в пикселях для табуляции; в противном случае, если 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 как значение.
Отметка эллипсиса следует за направлением макета. Например, она будет расположена справа от текста для макетов справа налево, если режим равен Qt::ElideLeft, и слева от текста, если режим равен 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(символ) всех символов в шрифте.
Обратите внимание, что эта функция может быть очень медленной для больших шрифтов.
См. также minRightBearing() и leftBearing().
int QFontMetrics::minRightBearing() const
Возвращает минимальный правый отступ шрифта.
Это наименьший rightBearing(символ) всех символов в шрифте.
Обратите внимание, что эта функция может быть очень медленной для больших шрифтов.
См. также 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, он указывает на последовательность пиксельных позиций для табуляции; иначе, если 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.
Два объекта метрики шрифта считаются равными, если они были созданы из одного и того же QFont и устройства отрисовки, для которых они были созданы, считаются совместимыми.
См. также operator==().
QFontMetrics &QFontMetrics::operator=(const QFontMetrics &fm)
Присваивает метрики шрифта fm.
QFontMetrics &QFontMetrics::operator=(QFontMetrics &&other)
Перемещающее присваивание other этому экземпляру QFontMetrics.
Эта функция была добавлена в Qt 5.2.
bool QFontMetrics::operator==(const QFontMetrics &other) const
Возвращает true если other равно этому объекту; в противном случае возвращает false.
Два объекта метрики шрифта считаются равными, если они были созданы из одного и того же QFont и устройства отрисовки, для которых они были созданы, считаются совместимыми.
См. также operator!=().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qfontmetrics.html