이 페이지에서

QTextLayout Class

QTextLayout 클래스는 텍스트의 레이아웃을 지정하고 렌더링하는 데 사용됩니다. 더 보기...

헤더: #include <QTextLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

참고: 이 클래스의 모든 함수는 재진입 가능합니다.

공개 유형

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);
textLayout.draw(&painter, QPoint(0, 0));

또한 각 줄을 개별적으로 그릴 수도 있습니다. 예를 들어, 위젯에 들어가지 않아 생략된 마지막 줄을 그릴 때와 같이 사용할 수 있습니다:

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()을 사용하여 유효한 커서 위치를 찾을 수 있습니다.

QTextLayout 자체는 setPosition()을 사용하여 위치를 지정할 수 있으며, boundingRect(), minimumWidth() 및 maximumWidth() 메서드를 제공합니다.

QStaticText도 참조하십시오 .

멤버 유형 문서

enum QTextLayout::CursorMode

상수상수
QTextLayout::SkipCharacters0
QTextLayout::SkipWords1

[since 6.5] enum QTextLayout::GlyphRunRetrievalFlag
flags QTextLayout::GlyphRunRetrievalFlags

GlyphRunRetrievalFlag는 glyphRuns() 함수에 전달되는 플래그를 지정하여, QGlyphRun 객체에 레이아웃의 어떤 속성이 반환될지 결정합니다. 각 속성은 메모리를 소모하고 추가 할당이 필요할 수 있으므로, 나중에 액세스해야 할 속성만 요청하는 것이 좋습니다.

상수값설명
QTextLayout::RetrieveGlyphIndexes0x1글리프에 해당하는 폰트 내 인덱스를 가져옵니다.
QTextLayout::RetrieveGlyphPositions0x2레이아웃 내 글리프의 상대적 위치를 가져옵니다.
QTextLayout::RetrieveStringIndexes0x4각 글리프에 해당하는 원본 문자열의 인덱스를 가져옵니다.
QTextLayout::RetrieveString0x8레이아웃에서 원본 문자열을 가져옵니다.
QTextLayout::RetrieveAll0xffff레이아웃의 사용 가능한 모든 속성을 가져옵니다.

이 열거형은 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)

주어진 ` text `을 지정된 ` font`에 따라 배치하기 위한 텍스트 레이아웃을 생성합니다.

모든 메트릭 및 레이아웃 계산은 페인트 디바이스( 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

지정된 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()도 참조하십시오 .

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 가 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 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 로 설정합니다. 레이아웃이 무효화되므로 다시 레이아웃을 생성해야 합니다.

이 ` QTextLayout `를 ` QTextDocument `의 일부로 사용할 경우, 이 메서드는 아무런 효과도 미치지 않는다는 점에 유의하십시오.

text()도 참조하십시오 .

void QTextLayout::setTextOption(const QTextOption &option)

레이아웃 과정을 제어하는 텍스트 옵션 구조를 지정된 ` option`로 설정합니다.

textOption()도 참조하십시오 .

QString QTextLayout::text() const

레이아웃의 텍스트를 반환합니다.

setText()도 참조하십시오 .

const QTextOption &QTextLayout::textOption() const

레이아웃 과정을 제어하는 데 사용되는 현재 텍스트 옵션을 반환합니다.

setTextOption()도 참조하십시오 .

© 2026 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.