QTextLayout Class
QTextLayout 클래스는 텍스트를 배치하고 렌더링하는 데 사용됩니다. 더 보기...
Header: | #include <QTextLayout> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 상속된 멤버를 포함한 모든 멤버 목록
- QTextLayout은 리치 텍스트 처리 API의 일부입니다.
참고: 이 클래스의 모든 함수는 재인용됩니다.
공용 유형
struct | FormatRange |
enum | CursorMode { SkipCharacters, SkipWords } |
(since 6.5) enum | GlyphRunRetrievalFlag { RetrieveGlyphIndexes, RetrieveGlyphPositions, RetrieveStringIndexes, RetrieveString, RetrieveAll } |
flags | GlyphRunRetrievalFlags |
공용 함수
QTextLayout() | |
QTextLayout(const QString &text) | |
QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = 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 QList<QTextLayout::FormatRange> &selections = QList<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 |
QList<QTextLayout::FormatRange> | formats() const |
QList<QGlyphRun> | glyphRuns(int from = -1, int length = -1) const |
(since 6.5) QList<QGlyphRun> | glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) 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, QTextLayout::CursorMode mode = SkipCharacters) const |
QPointF | position() const |
int | preeditAreaPosition() const |
QString | preeditAreaText() const |
int | previousCursorPosition(int oldPos, QTextLayout::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 QList<QTextLayout::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 |
상세 설명
유니코드 호환 렌더링, 줄 바꿈, 커서 위치 처리 등 최신 텍스트 레이아웃 엔진에서 기대할 수 있는 많은 기능을 제공합니다. 또한 디바이스 독립적인 레이아웃을 생성하고 렌더링할 수 있는데, 이는 WYSIWYG 애플리케이션에 중요한 기능입니다.
이 클래스는 다소 낮은 수준의 API를 가지고 있으며 특수한 위젯에 대한 자체 텍스트 렌더링을 구현하려는 경우가 아니라면 직접 사용할 필요는 없을 것입니다.
QTextLayout은 일반 텍스트와 서식 있는 텍스트 모두에 사용할 수 있습니다.
QTextLayout은 지정된 너비를 가진 QTextLine 인스턴스 시퀀스를 만드는 데 사용할 수 있으며 화면에 독립적으로 배치할 수 있습니다. 레이아웃이 완료되면 페인트 장치에서 이러한 선을 그릴 수 있습니다.
레이아웃할 텍스트는 생성자에서 제공하거나 setText()로 설정할 수 있습니다.
레이아웃은 QTextLine 객체의 시퀀스로 볼 수 있으며, createLine()를 사용하여 QTextLine 인스턴스를 만들고 lineAt() 또는 lineForTextPosition()를 사용하여 생성된 선을 검색할 수 있습니다.
다음은 레이아웃 단계를 보여주는 코드 스니펫입니다:
int leading = fontMetrics.leading(); qreal height = 0; textLayout.setCacheEnabled(true); textLayout.beginLayout(); while (true) { 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); QFontMetrics fontMetrics = painter.fontMetrics(); int lineSpacing = fontMetrics.lineSpacing(); int y = 0; QTextLayout textLayout(content, painter.font()); textLayout.beginLayout(); while (true) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(width()); const int nextLineY = y + lineSpacing; if (height() >= nextLineY + lineSpacing) { line.draw(&painter, QPoint(0, y)); y = nextLineY; } else { const QString lastLine = content.mid(line.textStart()); const QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, width()); painter.drawText(QPoint(0, y + fontMetrics.ascent()), elidedLastLine); line = textLayout.createLine(); break; } } textLayout.endLayout();
텍스트의 지정된 위치에 대해 isValidCursorPosition(), nextCursorPosition() 및 previousCursorPosition()를 사용하여 유효한 커서 위치를 찾을 수 있습니다.
setPosition(), boundingRect(), minimumWidth() 및 maximumWidth()를 사용하여 QTextLayout 자체의 위치를 지정할 수 있습니다.
QStaticText 를참조하세요 .
멤버 유형 문서
enum QTextLayout::CursorMode
상수 | 값 |
---|---|
QTextLayout::SkipCharacters | 0 |
QTextLayout::SkipWords | 1 |
[since 6.5]
열거형 QTextLayout::GlyphRunRetrievalFlag
플래그 QTextLayout::GlyphRunRetrievalFlags
GlyphRunRetrievalFlag는 glyphRuns() 함수에 전달되는 플래그를 지정하여 QGlyphRun 객체에서 반환되는 레이아웃의 속성을 결정합니다. 각 속성은 메모리를 소비하고 추가 할당이 필요할 수 있으므로 나중에 액세스해야 하는 속성만 요청하는 것이 좋습니다.
Constant | 값 | 설명 |
---|---|---|
QTextLayout::RetrieveGlyphIndexes | 0x1 | 글리프에 해당하는 글꼴의 인덱스를 검색합니다. |
QTextLayout::RetrieveGlyphPositions | 0x2 | 레이아웃에서 글리프의 상대적 위치를 검색합니다. |
QTextLayout::RetrieveStringIndexes | 0x4 | 각 글리프에 해당하는 원본 문자열의 인덱스를 검색합니다. |
QTextLayout::RetrieveString | 0x8 | 레이아웃에서 원본 소스 문자열을 검색합니다. |
QTextLayout::RetrieveAll | 0xffff | 레이아웃의 사용 가능한 모든 프로퍼티를 검색합니다. |
이 열거형은 Qt 6.5에 도입되었습니다.
GlyphRunRetrievalFlags 유형은 QFlags<GlyphRunRetrievalFlag>에 대한 typedef입니다. 이 유형은 GlyphRunRetrievalFlag 값의 OR 조합을 저장합니다.
glyphRuns() 및 QTextLine::glyphRuns()도 참조하십시오 .
멤버 함수 문서
QTextLayout::QTextLayout()
빈 텍스트 레이아웃을 구성합니다.
setText()도 참조하세요 .
QTextLayout::QTextLayout(const QString &text)
주어진 text 을 레이아웃하는 텍스트 레이아웃을 구성합니다.
QTextLayout::QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr)
지정된 font 을 사용하여 주어진 text 을 레이아웃하는 텍스트 레이아웃을 구성합니다.
모든 메트릭 및 레이아웃 계산은 페인트 장치인 paintdevice 에서 수행됩니다. paintdevice 이 nullptr
인 경우 계산은 화면 메트릭으로 수행됩니다.
[noexcept]
QTextLayout::~QTextLayout()
레이아웃을 파괴합니다.
void QTextLayout::beginLayout()
레이아웃 프로세스를 시작합니다.
경고: 레이아웃이 무효화되므로 이전 콘텐츠를 참조하는 기존의 모든 QTextLine 객체는 이제 삭제되어야 합니다.
endLayout()도 참조하세요 .
QRectF QTextLayout::boundingRect() const
레이아웃의 모든 선을 포함하는 가장 작은 직사각형입니다.
bool QTextLayout::cacheEnabled() const
전체 레이아웃 정보가 캐시된 경우 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
setCacheEnabled()도 참조하세요 .
void QTextLayout::clearFormats()
텍스트 레이아웃에서 지원하는 추가 형식 목록을 지웁니다.
formats() 및 setFormats()도 참조하세요 .
void QTextLayout::clearLayout()
레이아웃의 줄 정보를 지웁니다. 이 함수를 호출한 후 lineCount()는 0을 반환합니다.
경고: 레이아웃이 무효화되므로 이전 콘텐츠를 참조하는 기존의 모든 QTextLine 객체는 이제 삭제되어야 합니다.
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 QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF()) const
pos 으로 지정한 위치에 페인터 p 에 전체 레이아웃을 그립니다. 렌더링된 레이아웃은 지정된 selections 을 포함하며 clip 으로 지정된 사각형 안에 잘립니다.
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const
지정된 painter 을 사용하여 지정된 position 에 현재 펜과 지정된 width 으로 텍스트 커서를 그립니다. 텍스트 내의 해당 위치는 cursorPosition 로 지정됩니다.
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const
이 함수는 오버로드된 함수입니다.
지정된 painter 을 사용하여 지정된 position 에 현재 펜으로 텍스트 커서를 그립니다. 텍스트 내 해당 위치는 cursorPosition 로 지정됩니다.
void QTextLayout::endLayout()
레이아웃 프로세스를 종료합니다.
beginLayout()도 참조하세요 .
QFont QTextLayout::font() const
레이아웃에 사용되는 현재 글꼴을 반환하거나 설정된 글꼴이 없는 경우 기본 글꼴을 반환합니다.
setFont()도 참조하세요 .
QList<QTextLayout::FormatRange> QTextLayout::formats() const
텍스트 레이아웃에서 지원하는 추가 형식 목록을 반환합니다.
setFormats() 및 clearFormats()도 참조하세요 .
QList<QGlyphRun> QTextLayout::glyphRuns(int from = -1, int length = -1) const
이 함수는 오버로드된 함수입니다.
이 QTextLayout 에서 from 위치부터 시작하는 length 문자에 해당하는 모든 글리프에 대한 글리프 인덱스와 위치를 반환합니다. 이 함수는 비용이 많이 드는 함수이므로 시간에 민감한 컨텍스트에서는 호출해서는 안 됩니다.
from 이 0보다 작으면 레이아웃의 첫 번째 문자부터 글리프 실행이 시작됩니다. length 이 0보다 작으면 시작 위치에서 전체 문자열에 걸쳐 실행됩니다.
참고: 이는 glyphRuns(from, length, QTextLayout::GlyphRunRetrievalFlag::GlyphIndexes | QTextLayout::GlyphRunRetrievalFlag::GlyphPositions)를 호출하는 것과 동일합니다.
draw() 및 QPainter::drawGlyphRun()도 참조하세요 .
[since 6.5]
QList<QGlyphRun> QTextLayout::glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) const
이 함수는 오버로드된 함수입니다.
이 QTextLayout 에서 from 위치부터 시작하는 length 문자에 해당하는 모든 글리프에 대한 글리프 인덱스와 위치를 반환합니다. 이 함수는 비용이 많이 드는 함수이므로 시간에 민감한 컨텍스트에서는 호출해서는 안 됩니다.
from 이 0보다 작으면 레이아웃의 첫 번째 문자부터 글리프 실행이 시작됩니다. length 이 0보다 작으면 시작 위치에서 전체 문자열에 걸쳐 실행됩니다.
retrievalFlags 은 레이아웃에서 검색할 QGlyphRun 의 속성을 지정합니다. 할당과 메모리 소모를 최소화하려면 나중에 액세스해야 하는 속성만 포함하도록 설정해야 합니다.
이 함수는 Qt 6.5에 도입되었습니다.
draw() 및 QPainter::drawGlyphRun()도 참조하세요 .
bool QTextLayout::isValidCursorPosition(int pos) const
pos 위치가 유효한 커서 위치인 경우 true
을 반환합니다.
유니코드 컨텍스트에서 텍스트의 일부 위치는 유니코드 대리자 또는 그래프문자 클러스터 안에 있기 때문에 유효한 커서 위치가 아닙니다.
문자 집합은 화면에서 분할할 수 없는 하나의 개체를 형성하는 두 개 이상의 유니코드 문자로 이루어진 시퀀스입니다. 예를 들어 라틴 문자 `Ä'는 유니코드에서 `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, QTextLayout::CursorMode mode = SkipCharacters) const
주어진 커서를 존중하는 oldPos 다음 유효한 커서 위치 mode 를 반환합니다. oldPos 이 유효한 커서 위치가 아닌 경우 oldPos 값을 반환합니다.
isValidCursorPosition() 및 previousCursorPosition()도 참조하세요 .
QPointF QTextLayout::position() const
레이아웃의 전역 위치입니다. 이는 경계 사각형 및 레이아웃 프로세스와 무관합니다.
setPosition()도 참조하세요 .
int QTextLayout::preeditAreaPosition() const
편집이 수행되기 전에 처리할 텍스트 레이아웃에서 영역의 위치를 반환합니다.
preeditAreaText()도 참조하세요 .
QString QTextLayout::preeditAreaText() const
편집이 수행되기 전에 레이아웃에 삽입된 텍스트를 반환합니다.
preeditAreaPosition()도 참조하세요 .
int QTextLayout::previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const
주어진 커서 mode 를 존중하는 oldPos 앞의 첫 번째 유효한 커서 위치를 반환합니다. oldPos 이 유효한 커서 위치가 아닌 경우 oldPos 값을 반환합니다.
isValidCursorPosition() 및 nextCursorPosition()도 참조하세요 .
int QTextLayout::rightCursorPosition(int oldPos) const
커서 위치를 oldPos, 그 옆의 오른쪽으로 되돌립니다. 양방향 재정렬 후 문자의 시각적 위치에 따라 달라집니다.
leftCursorPosition() 및 nextCursorPosition()도 참조하세요 .
void QTextLayout::setCacheEnabled(bool enable)
enable 이 참이면 전체 레이아웃 정보 캐싱을 활성화하고, 그렇지 않으면 레이아웃 캐싱을 비활성화합니다. 일반적으로 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 QList<QTextLayout::FormatRange> &formats)
텍스트 레이아웃에서 지원하는 추가 형식을 formats 로 설정합니다. 이 형식은 사전 편집 영역 텍스트가 제자리에 적용된 상태로 적용됩니다.
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 으로 설정합니다. 레이아웃이 무효화되며 다시 레이아웃을 작성해야 합니다.
QTextDocument 의 일부로 QTextLayout 을 사용하는 경우 이 메서드는 효과가 없습니다.
text()도 참조하세요 .
void QTextLayout::setTextOption(const QTextOption &option)
레이아웃 프로세스를 제어하는 텍스트 옵션 구조를 지정된 option 으로 설정합니다.
textOption()도 참조하세요 .
QString QTextLayout::text() const
레이아웃의 텍스트를 반환합니다.
setText()도 참조하세요 .
const QTextOption &QTextLayout::textOption() const
레이아웃 프로세스를 제어하는 데 사용되는 현재 텍스트 옵션을 반환합니다.
setTextOption()도 참조하세요 .
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.