Класс QTextLayout
Класс QTextLayout используется для вывода и рендеринга текста. Подробнее...
| Заголовок: | #include <QTextLayout> |
| qmake: | QT += gui |
Примечание: Все функции в этом классе являются повторно-входными.
Публичные типы
| класс | FormatRange |
| перечисление | CursorMode { SkipCharacters, SkipWords } |
Публичные функции
| QTextLayout() | |
| QTextLayout(const QString &text) | |
| QTextLayout(const QString &text, const QFont &font, QPaintDevice *paintdevice = Q_NULLPTR) | |
| ~QTextLayout() | |
| void | beginLayout() |
| QRectF | boundingRect() const |
| bool | cacheEnabled() const |
| void | clearFormats() |
| void | clearLayout() |
| QTextLine | createLine() |
| Qt::CursorMoveStyle | cursorMoveStyle() const |
| void | draw(QPainter *p, const QPointF &pos, const QVector<FormatRange> &selections = QVector<FormatRange> (), const QRectF &clip = QRectF()) const |
| void | drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const |
| void | drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const |
| void | endLayout() |
| QFont | font() const |
| QVector<FormatRange> | formats() const |
| QList<QGlyphRun> | glyphRuns(int from = -1, int length = -1) const |
| bool | isValidCursorPosition(int pos) const |
| int | leftCursorPosition(int oldPos) const |
| QTextLine | lineAt(int i) const |
| int | lineCount() const |
| QTextLine | lineForTextPosition(int pos) const |
| qreal | maximumWidth() const |
| qreal | minimumWidth() const |
| int | nextCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const |
| QPointF | position() const |
| int | preeditAreaPosition() const |
| QString | preeditAreaText() const |
| int | previousCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const |
| int | rightCursorPosition(int oldPos) const |
| void | setCacheEnabled(bool enable) |
| void | setCursorMoveStyle(Qt::CursorMoveStyle style) |
| void | setFont(const QFont &font) |
| void | setFormats(const QVector<FormatRange> &formats) |
| void | setPosition(const QPointF &p) |
| void | setPreeditArea(int position, const QString &text) |
| void | setText(const QString &string) |
| void | setTextOption(const QTextOption &option) |
| QString | text() const |
| const QTextOption & | textOption() const |
| bool | operator!=(const FormatRange &lhs, const FormatRange &rhs) |
| bool | operator==(const FormatRange &lhs, const FormatRange &rhs) |
Подробное описание
Класс QTextLayout используется для вывода и рендеринга текста.
Он предлагает множество функций, ожидаемых от современного движка вывода текста, включая соответствие Unicode, перенос слов и обработку позиционирования курсора. Он также может создавать и отображать независимый от устройства макет, что важно для приложений WYSIWYG.
Класс имеет довольно низкоуровневый API, и если вы не планируете реализовывать собственное отображение текста для какого-то специализированного виджета, вам, вероятно, не нужно будет его использовать напрямую.
QTextLayout может использоваться как с простым, так и с форматированным текстом.
QTextLayout может использоваться для создания последовательности объектов QTextLine с заданными ширинами и может размещать их независимо на экране. После завершения вывода эти строки можно отобразить на устройстве для рисования.
Текст, который нужно вывести, можно предоставить в конструкторе или установить с помощью setText().
Макет можно рассматривать как последовательность объектов QTextLine; используйте createLine() для создания объекта QTextLine и lineAt() или lineForTextPosition() для получения созданных строк.
Вот фрагмент кода, который демонстрирует фазу вывода:
int leading = fontMetrics.leading();
qreal height = 0;
textLayout.setCacheEnabled(true);
textLayout.beginLayout();
while (1) {
QTextLine line = textLayout.createLine();
if (!line.isValid())
break;
line.setLineWidth(lineWidth);
height += leading;
line.setPosition(QPointF(0, height));
height += line.height();
}
textLayout.endLayout(); Затем текст можно отобразить, вызвав функцию draw() макета:
QPainter painter(this); textLayout.draw(&painter, QPoint(0, 0));
Для заданной позиции в тексте вы можете найти допустимую позицию курсора с помощью isValidCursorPosition(), nextCursorPosition() и previousCursorPosition().
Сам QTextLayout может быть позиционирован с помощью setPosition(); у него есть boundingRect(), minimumWidth() и maximumWidth().
См. также QStaticText.
Документация типов членов
перечисление QTextLayout::CursorMode
| Постоянная | Значение |
|---|---|
QTextLayout::SkipCharacters |
0 |
QTextLayout::SkipWords |
1 |
Документация функций-членов
QTextLayout::QTextLayout()
Создает пустой макет текста.
См. также setText().
QTextLayout::QTextLayout(const QString &text)
Создает макет текста для вывода заданного text.
QTextLayout::QTextLayout(const QString &text, const QFont &font, QPaintDevice *paintdevice = Q_NULLPTR)
Создаёт макет текста для вывода заданного text с указанным font.
Все вычисления метрик и макета будут выполняться относительно устройства рисования paintdevice. Если paintdevice равен 0, вычисления будут выполняться с учётом метрик экрана.
QTextLayout::~QTextLayout()
Удаляет макет.
void QTextLayout::beginLayout()
Начинает процесс макета.
Предупреждение: Это сделает макет недействительным, поэтому все существующие объекты QTextLine, ссылающиеся на предыдущее содержимое, должны быть удалены.
См. также endLayout().
QRectF QTextLayout::boundingRect() const
Самый маленький прямоугольник, содержащий все строки в макете.
bool QTextLayout::cacheEnabled() const
Возвращает true если полная информация о макете кэшируется; в противном случае возвращает false.
См. также setCacheEnabled().
void QTextLayout::clearFormats()
Очищает список дополнительных форматов, поддерживаемых макетом текста.
Эта функция была добавлена в Qt 5.6.
См. также formats() и setFormats().
void QTextLayout::clearLayout()
Очищает информацию о строках в макете. После вызова этой функции, lineCount() возвращает 0.
Предупреждение: Это сделает макет недействительным, поэтому все существующие объекты QTextLine, ссылающиеся на предыдущее содержимое, должны быть удалены.
Эта функция была добавлена в Qt 4.4.
QTextLine QTextLayout::createLine()
Возвращает новую строку текста для вывода, если в макет нужно вставить текст; в противном случае возвращает недействительную строку текста.
Макет текста создаёт новый объект строки, который начинается после последней строки в макете или в начале, если макет пустой. Макет поддерживает внутренний курсор, и каждая строка заполняется текстом с позиции курсора и далее при вызове функции QTextLine::setLineWidth().
После вызова QTextLine::setLineWidth() можно создать и заполнить новую строку текстом. Повторение этого процесса выведет весь блок текста, содержащийся в QTextLayout. Если текст больше не нужно вставлять в макет, возвращённая QTextLine не будет действительной (isValid() вернёт false).
Qt::CursorMoveStyle QTextLayout::cursorMoveStyle() const
Стиль перемещения курсора этого QTextLayout. По умолчанию – Qt::LogicalMoveStyle.
См. также setCursorMoveStyle().
void QTextLayout::draw(QPainter *p, const QPointF &pos, const QVector<FormatRange> &selections = QVector<FormatRange> (), const QRectF &clip = QRectF()) const
Отображает весь макет на рисовальщике p в позиции, указанной pos. Отображаемый макет включает указанные selections и ограничен прямоугольником, указанным clip.
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const
Рисует курсор текста с текущей кистью и заданной width в указанной position с помощью заданного painter. Соответствующая позиция в тексте задаётся cursorPosition.
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const
Это перегруженная функция.
Рисует курсор текста с текущей кистью в заданной position с помощью заданного painter. Соответствующая позиция в тексте задаётся cursorPosition.
void QTextLayout::endLayout()
Заканчивает процесс макета.
См. также beginLayout().
QFont QTextLayout::font() const
Возвращает текущий шрифт, используемый для макета, или шрифт по умолчанию, если он не установлен.
См. также setFont().
QVector<FormatRange> QTextLayout::formats() const
Возвращает список дополнительных форматов, поддерживаемых макетом текста.
Эта функция была добавлена в Qt 5.6.
См. также setFormats() и clearFormats().
QList<QGlyphRun> QTextLayout::glyphRuns(int from = -1, int length = -1) const
Возвращает индексы и позиции глифов для всех глифов, соответствующих length символам, начиная с позиции from в этом QTextLayout. Эта функция ресурсоёмкая и не должна вызываться в контексте, чувствительном к времени.
Если from меньше нуля, то глифы будут начинаться с первого символа в макете. Если length меньше нуля, то он охватывает всю строку с начальной позиции.
Эта функция была добавлена в Qt 4.8.
См. также draw() и QPainter::drawGlyphRun().
bool QTextLayout::isValidCursorPosition(int pos) const
/ Возвращает true если позиция pos является допустимой позицией курсора.
В контексте Юникода некоторые позиции в тексте не являются допустимыми позициями курсора, потому что позиция находится внутри суррогата Юникода или кластера графем.
Кластер графем — это последовательность двух или более символов Юникода, которые образуют одну неделимую сущность на экране. Например, латинская буква «Ä» может быть представлена в Юникоде двумя символами, «A» (0x41) и диэрезисом (0x308). Курсор текста может быть размещён только до или после этих двух символов, но никогда не между ними, поскольку это не имеет смысла. В индийских языках каждый слог образует кластер графем.
int QTextLayout::leftCursorPosition(int oldPos) const
Возвращает позицию курсора слева от oldPos, рядом с ним. Она зависит от визуального расположения символов после двунаправленной перестановки.
См. также rightCursorPosition() и previousCursorPosition().
QTextLine QTextLayout::lineAt(int i) const
Возвращает i-ю строку текста в этом макете текста.
См. также lineCount() и lineForTextPosition().
int QTextLayout::lineCount() const
Возвращает количество строк в этом макете текста.
См. также lineAt().
QTextLine QTextLayout::lineForTextPosition(int pos) const
Возвращает строку, содержащую позицию курсора, указанную pos.
См. также isValidCursorPosition() и lineAt().
qreal QTextLayout::maximumWidth() const
Максимальная ширина, до которой может быть расширен макет; по существу, ширина всего текста.
Предупреждение: Эта функция возвращает действительное значение только после завершения макета.
См. также minimumWidth().
qreal QTextLayout::minimumWidth() const
Минимальная необходимая ширина макета. Это ширина наименьшей неразрывной подстроки макета.
Предупреждение: Эта функция возвращает действительное значение только после завершения макета.
См. также maximumWidth().
int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const
Возвращает следующую допустимую позицию курсора после oldPos, которая учитывает заданный режим курсора mode. Возвращает значение oldPos, если oldPos не является допустимой позицией курсора.
См. также isValidCursorPosition() и previousCursorPosition().
QPointF QTextLayout::position() const
Глобальная позиция макета. Она независима от прямоугольника ограничителя и процесса макета.
Эта функция была введена в Qt 4.2.
См. также setPosition().
int QTextLayout::preeditAreaPosition() const
Возвращает позицию области в макете текста, которая будет обработана перед редактированием.
См. также preeditAreaText().
QString QTextLayout::preeditAreaText() const
Возвращает текст, который вставляется в макет перед редактированием.
См. также preeditAreaPosition().
int QTextLayout::previousCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const
Возвращает первую допустимую позицию курсора перед oldPos, которая учитывает заданный режим курсора mode. Возвращает значение oldPos, если oldPos не является допустимой позицией курсора.
См. также isValidCursorPosition() и nextCursorPosition().
int QTextLayout::rightCursorPosition(int oldPos) const
Возвращает позицию курсора справа от oldPos, рядом с ним. Она зависит от визуальной позиции символов после двунаправленного упорядочивания.
См. также leftCursorPosition() и nextCursorPosition().
void QTextLayout::setCacheEnabled(bool enable)
Включает кэширование всей информации о макете, если enable имеет значение true; в противном случае отключает кэширование макета. Обычно QTextLayout удаляет большую часть информации о макете после вызова endLayout() для снижения потребления памяти. Однако, если вы хотите сразу же отобразить размещённый текст, включение кэширования может значительно ускорить отображение.
См. также cacheEnabled().
void QTextLayout::setCursorMoveStyle(Qt::CursorMoveStyle style)
Устанавливает визуальный стиль перемещения курсора на заданный style. Если QTextLayout поддерживается документом, можно проигнорировать это и использовать опцию в QTextDocument; эта опция предназначена для виджетов, таких как QLineEdit или пользовательских виджетов без QTextDocument. Значение по умолчанию — Qt::LogicalMoveStyle.
См. также cursorMoveStyle().
void QTextLayout::setFont(const QFont &font)
Устанавливает шрифт макета на заданный font. Макет становится недействительным и должен быть повторно размещён.
См. также font().
void QTextLayout::setFormats(const QVector<FormatRange> &formats)
Устанавливает дополнительные форматы, поддерживаемые макетом текста, на formats. Форматы применяются с текстом области предварительного редактирования.
Эта функция была введена в Qt 5.6.
См. также formats() и clearFormats().
void QTextLayout::setPosition(const QPointF &p)
Перемещает макет текста в точку p.
См. также position().
void QTextLayout::setPreeditArea(int position, const QString &text)
Устанавливает position и text области в макете, которая обрабатывается перед редактированием. Макет становится недействительным и должен быть повторно размещён.
См. также preeditAreaPosition() и preeditAreaText().
void QTextLayout::setText(const QString &string)
Устанавливает текст макета на заданную string. Макет становится недействительным и должен быть повторно размещён.
Обратите внимание, что при использовании этого QTextLayout в качестве части QTextDocument этот метод не повлияет.
См. также text().
void QTextLayout::setTextOption(const QTextOption &option)
Устанавливает структуру параметров текста, которая управляет процессом макета, на заданный option.
См. также textOption().
QString QTextLayout::text() const
Возвращает текст макета.
См. также setText().
const QTextOption &QTextLayout::textOption() const
Возвращает текущие параметры текста, используемые для управления процессом макета.
См. также setTextOption().
bool QTextLayout::operator!=(const FormatRange &lhs, const FormatRange &rhs)
Возвращает true, если какие-либо из start, length, или format полей в lhs и rhs содержат разные значения соответственно.
bool QTextLayout::operator==(const FormatRange &lhs, const FormatRange &rhs)
Возвращает true, если start, length, и format поля в lhs и rhs содержат одинаковые значения соответственно.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qtextlayout.html