이 페이지에서

QCompleter Class

QCompleter 클래스는 항목 모델을 기반으로 자동 완성 기능을 제공합니다. 더 보기...

헤더: #include <QCompleter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속: QObject

공개 유형

enum CompletionMode { PopupCompletion, InlineCompletion, UnfilteredPopupCompletion }
enum ModelSorting { UnsortedModel, CaseSensitivelySortedModel, CaseInsensitivelySortedModel }

속성

공개 함수

QCompleter(QObject *parent = nullptr)
QCompleter(QAbstractItemModel *model, QObject *parent = nullptr)
QCompleter(const QStringList &list, QObject *parent = nullptr)
virtual ~QCompleter() override
Qt::CaseSensitivity caseSensitivity() const
int completionColumn() const
int completionCount() const
QCompleter::CompletionMode completionMode() const
QAbstractItemModel *completionModel() const
QString completionPrefix() const
int completionRole() const
QString currentCompletion() const
QModelIndex currentIndex() const
int currentRow() const
Qt::MatchFlags filterMode() const
int maxVisibleItems() const
QAbstractItemModel *model() const
QCompleter::ModelSorting modelSorting() const
virtual QString pathFromIndex(const QModelIndex &index) const
QAbstractItemView *popup() const
void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)
void setCompletionColumn(int column)
void setCompletionMode(QCompleter::CompletionMode mode)
void setCompletionRole(int role)
bool setCurrentRow(int row)
void setFilterMode(Qt::MatchFlags filterMode)
void setMaxVisibleItems(int maxItems)
void setModel(QAbstractItemModel *model)
void setModelSorting(QCompleter::ModelSorting sorting)
void setPopup(QAbstractItemView *popup)
void setWidget(QWidget *widget)
virtual QStringList splitPath(const QString &path) const
QWidget *widget() const
bool wrapAround() const

공개 슬롯

void complete(const QRect &rect = QRect())
void setCompletionPrefix(const QString &prefix)
void setWrapAround(bool wrap)

신호

void activated(const QModelIndex &index)
void activated(const QString &text)
void highlighted(const QModelIndex &index)
void highlighted(const QString &text)

재구현된 보호 함수

virtual bool event(QEvent *ev) override
virtual bool eventFilter(QObject *o, QEvent *e) override

상세 설명

QCompleter를 사용하면 QLineEdit 및 QComboBox 와 같은 모든 Qt Widgets에서 자동 완성 기능을 제공할 수 있습니다. 사용자가 단어를 입력하기 시작하면 QCompleter는 단어 목록을 기반으로 해당 단어를 완성할 수 있는 가능한 후보를 제안합니다. 단어 목록은 ` QAbstractItemModel` 형태로 제공됩니다. (단어 목록이 정적인 간단한 애플리케이션의 경우, QCompleter의 생성자에 ` QStringList `를 전달할 수 있습니다.)

기본 사용법

QCompleter는 일반적으로 QLineEdit 또는 QComboBox 와 함께 사용됩니다. 예를 들어, QLineEdit 에서 간단한 단어 목록을 기반으로 자동 완성 기능을 제공하는 방법은 다음과 같습니다:

QStringList wordList;
wordList << "alpha" << "omega" << "omicron" << "zeta";

QLineEdit *lineEdit = new QLineEdit(this);

QCompleter *completer = new QCompleter(wordList, this);
completer->setCaseSensitivity(Qt::CaseInsensitive);
lineEdit->setCompleter(completer);

QFileSystemModel 를 사용하여 파일 이름에 대한 자동 완성 기능을 제공할 수 있습니다. 예를 들어:

QCompleter *completer = new QCompleter(this);
completer->setModel(new QFileSystemModel(completer));
lineEdit->setCompleter(completer);

QCompleter가 작동할 모델을 설정하려면 setModel()를 호출하십시오. 기본적으로 QCompleter는 completion prefix (즉, 사용자가 입력을 시작한 단어)를 모델의 0번 열에 저장된 Qt::EditRole 데이터와 대소문자를 구분하여 일치시키려고 시도합니다. 이 설정은 setCompletionRole(), setCompletionColumn() 및 setCaseSensitivity()를 사용하여 변경할 수 있습니다.

모델이 자동 완성 기능에 사용되는 열과 역할 기준으로 정렬되어 있는 경우, QCompleter::CaseSensitivelySortedModel 또는 QCompleter::CaseInsensitivelySortedModel 을 인수로 지정하여 setModelSorting()을 호출할 수 있습니다. 대규모 모델의 경우, QCompleter가 선형 검색 대신 이진 검색을 사용할 수 있게 되므로 이로 인해 성능이 크게 향상될 수 있습니다. 이진 검색은 filterMode 가 Qt::MatchStartsWith 일 때만 작동합니다.

모델은 list model, table model 또는 tree model 일 수 있습니다. 트리 모델에 대한 완성 작업은 약간 더 복잡하며, 아래의 Handling Tree Models 섹션에서 다루고 있습니다.

completionMode()은 사용자에게 자동 완성 결과를 제공하는 데 사용되는 모드를 결정합니다.

완성 항목 반복 처리

단일 후보 문자열을 가져오려면, 완성해야 할 텍스트를 인수로 전달하여 ` setCompletionPrefix()`를 호출한 다음 ` currentCompletion()`를 호출하십시오. 다음과 같이 완성 후보 목록을 순회할 수 있습니다:

for (int i = 0; completer->setCurrentRow(i); i++)
    qDebug() << completer->currentCompletion() << " is match number " << i;

completionCount()는 현재 접두사에 대한 완성 결과의 총 개수를 반환합니다. completionCount()는 모델 전체를 스캔해야 하므로 가능한 한 사용을 피해야 합니다.

완성 모델

completionModel()는 현재 완성 접두사에 대한 모든 가능한 완성 항목을 모델에 나타나는 순서대로 포함하는 목록 모델을 반환합니다. 이 모델을 사용하여 사용자 정의 뷰에 현재 완성 항목을 표시할 수 있습니다. setCompletionPrefix()를 호출하면 완성 모델이 자동으로 새로 고쳐집니다.

트리 모델 처리

QCompleter는 트리 모델에서 완성 항목을 검색할 수 있습니다. 이때, 항목(또는 하위 항목, 하위-하위 항목)은 해당 항목으로의 경로를 지정함으로써 문자열로 명확하게 표현될 수 있다고 가정합니다. 그런 다음, 완성 처리는 한 단계씩 수행됩니다.

사용자가 파일 시스템 경로를 입력하는 예를 들어 보겠습니다. 모델은 (계층적) QFileSystemModel 입니다. 완성 기능은 경로의 모든 요소에 대해 발생합니다. 예를 들어, 현재 텍스트가 C:\Wind 인 경우, QCompleter는 현재 경로 요소를 완성하기 위해 Windows 을 제안할 수 있습니다. 마찬가지로, 현재 텍스트가 C:\Windows\Sy 인 경우, QCompleter는 System 을 제안할 수 있습니다.

이러한 종류의 자동 완성 기능이 작동하려면, QCompleter는 경로를 각 수준에서 일치하는 문자열 목록으로 분할할 수 있어야 합니다. C:\Windows\Sy 의 경우, "C:", "Windows", "Sy"로 분할되어야 합니다. splitPath()의 기본 구현은 모델이 QFileSystemModel 인 경우 QDir::separator()를 사용하여 completionPrefix 를 분할합니다.

완성 기능을 제공하려면 QCompleter는 인덱스로부터의 경로를 알아야 합니다. 이는 pathFromIndex()에 의해 제공됩니다. pathFromIndex()의 기본 구현은 목록 모델의 경우 edit role 에 대한 데이터를 반환하고, 모드가 QFileSystemModel 인 경우 절대 파일 경로를 반환합니다.

QAbstractItemModel, QLineEdit, QComboBox 및 Completer 예제도참조하십시오 .

멤버 유형 문서

enum QCompleter::CompletionMode

이 열거형은 사용자에게 자동 완성 기능을 제공하는 방식을 지정합니다.

상수값설명
QCompleter::PopupCompletion0현재 자동 완성 항목은 팝업 창에 표시됩니다.
QCompleter::InlineCompletion2완성 후보가 인라인(선택된 텍스트 형태)으로 표시됩니다.
QCompleter::UnfilteredPopupCompletion1가능한 모든 자동 완성 항목이 팝업 창에 표시되며, 가장 가능성이 높은 제안 항목이 ‘현재’로 표시됩니다.

setCompletionMode()도 참조하십시오 .

enum QCompleter::ModelSorting

이 열거형은 모델 내 항목이 어떻게 정렬되는지를 지정합니다.

상수값설명
QCompleter::UnsortedModel0모델이 정렬되지 않은 상태입니다.
QCompleter::CaseSensitivelySortedModel1모델이 대소문자를 구분하여 정렬됩니다.
QCompleter::CaseInsensitivelySortedModel2모델이 대소문자를 구분하지 않고 정렬됩니다.

setModelSorting()도 참조하십시오 .

속성 문서

caseSensitivity : Qt::CaseSensitivity

이 속성은 일치 작업의 대소문자 구분 여부를 지정합니다.

기본값은 ` Qt::CaseSensitive`입니다.

액세스 함수:

Qt::CaseSensitivity caseSensitivity() const
void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)

completionColumn, completionRole, modelSorting 및 filterMode도 참조하십시오 .

completionColumn : int

이 속성은 모델 내에서 완성 항목을 검색할 열을 지정합니다.

popup()가 QListView 인 경우, 이 열이 표시되도록 자동으로 설정됩니다.

기본적으로 일치 열은 0입니다.

액세스 함수:

int completionColumn() const
void setCompletionColumn(int column)

completionRole 및 caseSensitivity도 참조하십시오 .

completionMode : CompletionMode

사용자에게 자동 완성 기능이 어떻게 제공되는지

기본값은 QCompleter::PopupCompletion 입니다.

Access 함수:

QCompleter::CompletionMode completionMode() const
void setCompletionMode(QCompleter::CompletionMode mode)

completionPrefix : QString

이 속성은 자동 완성 기능을 제공하는 데 사용되는 자동 완성 접두사를 저장합니다.

completionModel()는 prefix 에 대한 가능한 일치 항목 목록을 반영하도록 업데이트됩니다.

액세스 함수:

QString completionPrefix() const
void setCompletionPrefix(const QString &prefix)

completionRole : int

이 속성은 항목의 내용을 조회하여 일치하는 항목을 찾는 데 사용될 항목 역할을 저장합니다.

기본 역할은 ' Qt::EditRole'입니다.

액세스 함수:

int completionRole() const
void setCompletionRole(int role)

completionColumn 및 caseSensitivity도 참조하십시오 .

filterMode : Qt::MatchFlags

이 속성은 필터링이 수행되는 방식을 제어합니다.

filterMode가 Qt::MatchStartsWith 로 설정된 경우, 입력한 문자로 시작하는 항목만 표시됩니다. Qt::MatchContains 는 입력한 문자가 포함된 항목을 표시하고, Qt::MatchEndsWith 는 입력한 문자로 끝나는 항목을 표시합니다.

filterMode를 Qt::MatchFlag 이외의 다른 값으로 설정하면 경고가 표시되며, 아무런 작업도 수행되지 않습니다. 이 때문에 Qt::MatchCaseSensitive 플래그는 아무런 효과가 없습니다. 대소문자 구분을 제어하려면 caseSensitivity 속성을 사용하십시오.

기본 모드는 ` Qt::MatchStartsWith`입니다.

Access 함수:

Qt::MatchFlags filterMode() const
void setFilterMode(Qt::MatchFlags filterMode)

caseSensitivity도 참조하십시오 .

maxVisibleItems : int

이 속성은 항목 수로 측정된, 화면에 표시될 수 있는 컴플리터의 최대 크기를 나타냅니다.

기본적으로 이 속성의 값은 7입니다.

액세스 함수:

int maxVisibleItems() const
void setMaxVisibleItems(int maxItems)

modelSorting : ModelSorting

이 속성은 모델의 정렬 방식을 저장합니다.

기본적으로, 자동 완성 기능을 제공하는 모델 내 항목의 순서에 대해서는 어떠한 가정도 하지 않습니다.

completionColumn() 및 completionRole()에 대한 모델의 데이터가 오름차순으로 정렬된 경우, 이 속성을 CaseSensitivelySortedModel 또는 CaseInsensitivelySortedModel 로 설정할 수 있습니다. 대규모 모델의 경우, 이렇게 하면 컴플리터 객체가 선형 검색 알고리즘 대신 이진 검색 알고리즘을 사용할 수 있으므로 성능이 크게 향상될 수 있습니다.

모델의 정렬 순서(즉, 오름차순 또는 내림차순)는 모델의 내용을 검사하여 동적으로 결정됩니다.

참고: 위에서 설명한 성능 향상 효과는 컴플리터의 대소문자 구분 설정( caseSensitivity )이 모델이 정렬 시 사용하는 대소문자 구분 방식과 다를 경우 발생하지 않습니다.

액세스 함수:

QCompleter::ModelSorting modelSorting() const
void setModelSorting(QCompleter::ModelSorting sorting)

setCaseSensitivity() 및 QCompleter::ModelSorting도 참조하십시오 .

wrapAround : bool

이 속성은 항목을 탐색할 때 자동 완성 목록이 처음부터 다시 시작되도록 설정합니다.

기본값은 true입니다.

액세스 함수:

bool wrapAround() const
void setWrapAround(bool wrap)

멤버 함수 설명서

QCompleter::QCompleter(QObject *parent = nullptr)

주어진 ` parent`를 사용하여 `completer` 객체를 생성합니다.

QCompleter::QCompleter(QAbstractItemModel *model, QObject *parent = nullptr)

주어진 ` parent `을 사용하여, 지정된 ` model`에서 자동 완성 항목을 제공하는 `completer` 객체를 생성합니다.

QCompleter::QCompleter(const QStringList &list, QObject *parent = nullptr)

주어진 ` parent `를 사용하여 `QCompleter` 객체를 생성하며, 이 객체는 지정된 ` list `를 가능한 완성 항목의 소스로 사용합니다.

[override virtual noexcept] QCompleter::~QCompleter()

완료자 객체를 삭제합니다.

[signal] void QCompleter::activated(const QModelIndex &index)

이 신호는 사용자가 ` popup()` 내의 항목을 활성화할 때(클릭하거나 리턴 키를 누를 때) 전송됩니다. ` completionModel()` 내의 해당 항목의 ` index `가 전달됩니다.

참고: 이 신호는 오버로드되어 있습니다. 이 신호에 연결하려면:

// Connect using qOverload:
connect(completer, qOverload(&QCompleter::activated),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(completer, qOverload(&QCompleter::activated),
        this, [](const QModelIndex &index) { /* handle activated */ });
더 많은 예제와 접근 방식은 ‘오버로드된 신호에 연결하기’를 참조하십시오.

[signal] void QCompleter::activated(const QString &text)

이 신호는 사용자가 popup() 내의 항목을 활성화(클릭하거나 리턴 키를 누름)했을 때 전송됩니다. 해당 항목의 text 가 제공됩니다.

참고: 이 신호는 오버로드되어 있습니다. 이 신호에 연결하려면:

// Connect using qOverload:
connect(completer, qOverload(&QCompleter::activated),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(completer, qOverload(&QCompleter::activated),
        this, [](const QString &text) { /* handle activated */ });
더 많은 예제와 방법에 대해서는 ‘오버로드된 신호에 연결하기’를 참조하십시오.

[slot] void QCompleter::complete(const QRect &rect = QRect())

QCompleter::PopupCompletion 및 QCompletion::UnfilteredPopupCompletion 모드의 경우, 이 함수를 호출하면 현재 완성 후보를 표시하는 팝업이 나타납니다. 기본적으로 rect 가 지정되지 않은 경우, 팝업은 widget()의 하단에 표시됩니다. rect 가 지정된 경우, 팝업은 사각형의 왼쪽 가장자리에 표시됩니다.

QCompleter::InlineCompletion 모드에서는 highlighted() 신호가 현재 완성 후보와 함께 발동됩니다.

int QCompleter::completionCount() const

현재 접두사에 대한 완성 결과의 개수를 반환합니다. 항목 수가 많은 정렬되지 않은 모델의 경우 이 작업에 많은 시간이 소요될 수 있습니다. 모든 완성 결과를 순차적으로 확인하려면 setCurrentRow() 및 currentCompletion()을 사용하십시오.

QAbstractItemModel *QCompleter::completionModel() const

완성 모델을 반환합니다. 완성 모델은 현재 완성 접두사에 대한 모든 가능한 일치 항목을 포함하는 읽기 전용 목록 모델입니다. 완성 모델은 현재 완성 결과를 반영하도록 자동으로 업데이트됩니다.

참고: 이 함수의 반환값은 순전히 일반성을 위해 ` QAbstractItemModel `로 정의되어 있습니다. 실제로 반환되는 모델의 종류는 ` QAbstractProxyModel `의 하위 클래스 인스턴스입니다.

completionPrefix 및 model()도 참조하십시오 .

QString QCompleter::currentCompletion() const

현재 완성 문자열을 반환합니다. 여기에는 ` completionPrefix`도 포함됩니다. ` setCurrentRow()`와 함께 사용하면 모든 일치 항목을 순회하는 데 활용할 수 있습니다.

setCurrentRow() 및 currentIndex()도 참조하십시오 .

QModelIndex QCompleter::currentIndex() const

completionModel()에서 현재 자동 완성 항목의 모델 인덱스를 반환합니다.

setCurrentRow(), currentCompletion() 및 model()도 참조하십시오 .

int QCompleter::currentRow() const

현재 행을 반환합니다.

setCurrentRow()도 참조하십시오 .

[override virtual protected] bool QCompleter::event(QEvent *ev)

QObject::event(QEvent *e)를 재구현합니다.

[override virtual protected] bool QCompleter::eventFilter(QObject *o, QEvent *e)

QObject::eventFilter(QObject *watched, QEvent *event)를 재구현합니다.

[signal] void QCompleter::highlighted(const QModelIndex &index)

이 신호는 popup() 내의 항목이 사용자에 의해 선택되었을 때 전송됩니다. 또한 completionMode()이 QCompleter::InlineCompletion 로 설정된 상태에서 complete()이 호출될 때도 전송됩니다. completionModel() 내의 해당 항목의 index 가 제공됩니다.

참고: 이 신호는 오버로드되어 있습니다. 이 신호에 연결하려면:

// Connect using qOverload:
connect(completer, qOverload(&QCompleter::highlighted),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(completer, qOverload(&QCompleter::highlighted),
        this, [](const QModelIndex &index) { /* handle highlighted */ });
더 많은 예제와 방법에 대해서는 오버로드된 신호에 연결하기를 참조하십시오.

[signal] void QCompleter::highlighted(const QString &text)

이 신호는 popup()의 항목이 사용자에 의해 강조 표시될 때 전송됩니다. 또한 completionMode()가 QCompleter::InlineCompletion 로 설정된 상태에서 complete()가 호출될 때도 전송됩니다. 해당 항목의 text 가 전달됩니다.

참고: 이 신호는 오버로드되어 있습니다. 이 신호에 연결하려면:

// Connect using qOverload:
connect(completer, qOverload(&QCompleter::highlighted),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(completer, qOverload(&QCompleter::highlighted),
        this, [](const QString &text) { /* handle highlighted */ });
더 많은 예제와 방법에 대해서는 오버로드된 신호에 연결하기를 참조하십시오.

QAbstractItemModel *QCompleter::model() const

완성 문자열을 제공하는 모델을 반환합니다.

setModel() 및 completionModel()도 참조하십시오 .

[virtual] QString QCompleter::pathFromIndex(const QModelIndex &index) const

지정된 index 의 경로를 반환합니다. 컴플리터 객체는 이를 사용하여 기본 모델에서 완성 텍스트를 가져옵니다.

기본 구현은 목록 모델의 경우 해당 항목의 ` edit role `를 반환합니다. 모델이 ` QFileSystemModel`인 경우 절대 파일 경로를 반환합니다.

splitPath()도 참조하십시오 .

완성 항목을 표시하는 데 사용되는 팝업을 반환합니다.

setPopup()도 참조하십시오 .

bool QCompleter::setCurrentRow(int row)

현재 행을 지정된 row 로 설정합니다. 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

이 함수는 currentCompletion()와 함께 사용하여 가능한 모든 완성 후보를 순회할 수 있습니다.

currentRow(), currentCompletion() 및 completionCount()도 참조하십시오 .

void QCompleter::setModel(QAbstractItemModel *model)

model 에 자동 완성 기능을 제공하는 모델을 설정합니다. model 는 목록 모델이거나 트리 모델일 수 있습니다. 이전에 이미 모델이 설정되어 있고 해당 모델의 부모가 QCompleter 인 경우, 해당 모델은 삭제됩니다.

편의상, model 가 QFileSystemModel 인 경우, QCompleter 는 Windows에서는 caseSensitivity 를 Qt::CaseInsensitive 로, 다른 플랫폼에서는 Qt::CaseSensitive 로 변경합니다.

completionModel(), modelSorting 및 Handling Tree Models도 참조하십시오 .

void QCompleter::setPopup(QAbstractItemView *popup)

완성 항목을 표시하는 데 사용되는 팝업을 ` popup`로 설정합니다. ` QCompleter `가 뷰의 소유권을 가져갑니다.

completionMode()가 QCompleter::PopupCompletion 또는 QCompleter::UnfilteredPopupCompletion 로 설정되면 QListView 가 자동으로 생성됩니다. 기본 팝업은 completionColumn()를 표시합니다.

뷰 설정을 수정하기 전에 이 함수가 호출되도록 해야 합니다. 뷰의 속성 중 일부는 뷰에 모델이 설정되어 있어야만 작동할 수 있기 때문입니다(예를 들어, 뷰에서 열을 숨기려면 뷰에 모델이 설정되어 있어야 합니다).

popup()도 참조하십시오 .

void QCompleter::setWidget(QWidget *widget)

완성 기능을 제공할 위젯을 ` widget`로 설정합니다. 이 함수는 ` QLineEdit::setCompleter()`를 사용하여 ` QLineEdit `에 ` QCompleter `를 설정하거나, ` QComboBox::setCompleter()`를 사용하여 ` QComboBox `에 ` `를 설정할 때 자동으로 호출됩니다. 사용자 정의 위젯에 대해 완성 기능을 제공하려면 위젯을 명시적으로 설정해야 합니다.

widget(), setModel() 및 setPopup()도 참조하십시오 .

[virtual] QStringList QCompleter::splitPath(const QString &path) const

주어진 ` path `을 ` model()`의 각 수준에서 일치시키는 데 사용되는 문자열로 분할합니다.

splitPath()의 기본 구현은 sourceModel()이 QFileSystemModel 일 때, QDir::separator()을 기반으로 파일 시스템 경로를 분할합니다.

리스트 모델과 함께 사용될 경우, 반환된 리스트의 첫 번째 항목이 일치 확인에 사용됩니다.

pathFromIndex() 및 Handling Tree Models도 참조하십시오 .

QWidget *QCompleter::widget() const

완성기 객체가 자동 완성 기능을 제공하는 위젯을 반환합니다.

setWidget()도 참조하십시오 .

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