Класс 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 |
| qreal | fontDpi() 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(). Они по необходимости медленные, и рекомендуется их избегать, если это возможно.
Для каждого символа вы можете получить его horizontalAdvance(), leftBearing() и rightBearing(), и узнать, находится ли он в шрифте, используя inFont(). Вы также можете обращаться к символу как к строке и использовать функции для строк.
Функции для строк включают horizontalAdvance(), для возвращения ширины строки в пикселях (или пунктах для принтера), 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() вместо этого.
См. также horizontalAdvance().
QRect QFontMetrics::boundingRect(const QString &text) const
Возвращает ограничивающий прямоугольник символов в строке, указанной в text. Ограничивающий прямоугольник всегда покрывает по крайней мере набор пикселей, который текст будет покрывать, если он нарисован в (0, 0).
Обратите внимание, что ограничивающий прямоугольник может простираться влево от (0, 0), например, для наклонных шрифтов, и что ширина возвращаемого прямоугольника может отличаться от того, что возвращает метод horizontalAdvance().
Если вам нужна ширина продвижения строки (чтобы выложить набор строк рядом друг с другом), используйте horizontalAdvance() вместо этого.
Символы новой строки обрабатываются как обычные символы, не как разрывы строк.
Высота ограничивающего прямоугольника не меньше значения, возвращаемого height().
См. также horizontalAdvance(), 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 не равен нулю, он указывает на 0-завершённую последовательность пиксельных позиций для табуляции; в противном случае, если tabStops не равно нулю, оно используется в качестве интервала табуляции (в пикселях).
Обратите внимание, что ограничивающий прямоугольник может простираться влево от (0, 0), например, для наклонных шрифтов, и что вывод текста может покрывать все пиксели в ограничивающем прямоугольнике.
Символы новой строки обрабатываются как разрывы строк.
Несмотря на различную фактическую высоту символов, высоты ограничивающих прямоугольников «Да» и «да» одинаковы.
Ограничивающий прямоугольник, возвращаемый этой функцией, немного больше, чем тот, который вычисляется более простой функцией boundingRect(). Эта функция использует максимальные левые и правые отступы шрифта, как это необходимо для многострочного текста, чтобы он выравнивался правильно. Также, для расчёта высоты используется fontHeight() и lineSpacing(), а не высоты отдельных символов.
См. также horizontalAdvance(), 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 не равен нулю, он указывает на 0-завершённую последовательность пиксельных позиций для табуляции; в противном случае, если tabStops не равно нулю, оно используется в качестве интервала табуляции (в пикселях).
int QFontMetrics::capHeight() const
Возвращает высоту заглавных букв шрифта.
Высота заглавных букв шрифта — это высота заглавной буквы над базовой линией. Конкретно, это высота заглавных букв, которые плоские — такие как H или I — в отличие от круглых букв, таких как O, или острых букв, таких как A, которые могут отображаться с переходом.
Эта функция была добавлена в Qt 5.8.
См. также ascent().
int QFontMetrics::descent() const
Возвращает спуск шрифта.
Спуск — это расстояние от базовой линии до самой нижней точки, до которой достигают символы. На практике некоторые дизайнеры шрифтов нарушают это правило, например, для размещения необычного символа в экзотическом языке, поэтому возможно (хотя и редко), что это значение будет слишком маленьким.
См. также ascent().
END_OF_DOCUMENT_MARKER ```QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const
Если строка text шире, чем width, возвращает усечённую версию строки (т.е., строку с "..." в ней). В противном случае возвращает исходную строку.
Параметр mode определяет, усекается ли текст слева (например, "...техн"), посередине (например, "Тр...хн") или справа (например, "Трол...").
Ширина width задаётся в пикселях, а не в символах.
Аргумент flags необязательный и в настоящее время поддерживает только Qt::TextShowMnemonic в качестве значения.
Отступ усечения следует направлению выравнивания. Например, для правосторонних выравниваний он будет расположен справа от текста, если mode имеет значение Qt::ElideLeft, и слева от текста, если mode имеет значение Qt::ElideRight.
Данная функция была добавлена в Qt 4.2.
qreal QFontMetrics::fontDpi() const
Возвращает DPI шрифта.
Данная функция была добавлена в Qt 5.14.
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.
Некоторые метрики описаны на изображении. Центральные тёмные прямоугольники охватывают логический горизонтальный отступ каждого символа. Внешние светлые прямоугольники охватывают 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 в шрифте.
Левый отступ — это расстояние вправо от левого пикселя символа до логического начала символа. Это значение отрицательно, если пиксели символа простираются влево от логического начала.
См. horizontalAdvance() для графического описания этой метрики.
См. также rightBearing(), minLeftBearing() и horizontalAdvance().
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 в шрифте.
Правый отступ — это расстояние влево от правого пикселя символа до логического начала последующего символа. Это значение отрицательно, если пиксели символа простираются вправо от horizontalAdvance() символа.
См. horizontalAdvance() для графического описания этой метрики.
См. также leftBearing(), minRightBearing() и horizontalAdvance().
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), например, для наклонных шрифтов, и что ширина возвращённого прямоугольника может отличаться от того, что возвращает метод horizontalAdvance().
END_OF_DOCUMENT_MARKERЕсли вы хотите узнать расширенную ширину строки (чтобы выровнять строки рядом друг с другом), используйте horizontalAdvance() вместо этого.
Символы новой строки обрабатываются как обычные символы, а не как разрывы строк.
Предупреждение: Вызов этого метода очень медленный в Windows.
Эта функция была представлена в Qt 4.3.
См. также horizontalAdvance(), 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==().
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.14/qfontmetrics.html