이 페이지에서

QProgressDialog Class

QProgressDialog 클래스는 처리 시간이 오래 걸리는 작업의 진행 상황을 사용자에게 알려줍니다. 더 보기...

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

속성

공개 함수

QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtual ~QProgressDialog()
bool autoClose() const
bool autoReset() const
QString labelText() const
int maximum() const
int minimum() const
int minimumDuration() const
void open(QObject *receiver, const char *member)
void setAutoClose(bool close)
void setAutoReset(bool reset)
void setBar(QProgressBar *bar)
void setCancelButton(QPushButton *cancelButton)
void setLabel(QLabel *label)
int value() const
bool wasCanceled() const

재구현된 공용 함수

virtual QSize sizeHint() const override

공개 슬롯

void cancel()
void reset()
void setCancelButtonText(const QString &cancelButtonText)
void setLabelText(const QString &text)
void setMaximum(int maximum)
void setMinimum(int minimum)
void setMinimumDuration(int ms)
void setRange(int minimum, int maximum)
void setValue(int progress)

신호

void canceled()

재구현된 보호 함수

virtual void changeEvent(QEvent *ev) override
virtual void closeEvent(QCloseEvent *e) override
virtual void resizeEvent(QResizeEvent *event) override
virtual void showEvent(QShowEvent *e) override

보호 슬롯

void forceShow()

상세 설명

진행 상황 대화 상자는 사용자에게 작업이 얼마나 걸릴지 알려주고, 애플리케이션이 멈춘 것이 아님을 보여주기 위해 사용됩니다. 또한 사용자가 작업을 중단할 수 있는 기회를 제공하기도 합니다.

진행 상황 대화 상자의 일반적인 문제점은 언제 사용해야 할지 판단하기 어렵다는 점입니다. 작업에 소요되는 시간은 하드웨어에 따라 다르기 때문입니다. QProgressDialog는 이 문제에 대한 해결책을 제공합니다. 즉, 작업에 소요될 시간을 (단계별 소요 시간을 기준으로) 추정하고, 그 추정 시간이 minimumDuration() (기본값은 4초)를 초과할 경우에만 대화 상자를 표시합니다.

setMinimum() 및 setMaximum() 또는 생성자를 사용하여 작업의 “단계” 수를 설정하고, 작업이 진행됨에 따라 setValue()를 호출하십시오. 단계 수는 임의로 선택할 수 있습니다. 복사된 파일 수, 수신된 바이트 수, 알고리즘의 메인 루프를 반복한 횟수 또는 기타 적절한 단위를 사용할 수 있습니다. 진행 상황은 setMinimum()로 설정된 값에서 시작되며, setMaximum()로 설정된 값을 인수로 지정하여 setValue()를 호출하면 진행 상황 대화 상자에 작업이 완료된 것으로 표시됩니다.

작업이 끝나면 대화 상자는 자동으로 초기화되고 숨겨집니다. 이 동작을 변경하려면 setAutoReset() 및 setAutoClose()를 사용하십시오. setMaximum() 또는 setRange()를 사용하여 현재 value()와 동일한 새로운 최대값을 설정하면, 대화 상자는 어떤 경우에도 닫히지 않는다는 점에 유의하십시오.

QProgressDialog를 사용하는 방법에는 모달 방식과 비모달 방식의 두 가지가 있습니다.

비모달 QProgressDialog에 비해 모달 QProgressDialog는 프로그래머가 사용하기에 더 간단합니다. 루프 내에서 작업을 수행하고, 일정한 간격으로 setValue()를 호출하며, wasCanceled()를 통해 취소 여부를 확인하면 됩니다. 예를 들어:

QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this);
progress.setWindowModality(Qt::WindowModal);

for (int i = 0; i < numFiles; i++) {
    progress.setValue(i);

    if (progress.wasCanceled())
        break;
    //... copy one file
}
progress.setValue(numFiles);

비모달 진행 상황 대화 상자는 사용자가 애플리케이션과 상호작용할 수 있는 백그라운드에서 수행되는 작업에 적합합니다. 이러한 작업은 일반적으로 QChronoTimer (또는 더 저수준인 QObject::timerEvent())이나 QSocketNotifier 와 같은 타이머 클래스를 기반으로 하거나, 별도의 스레드에서 수행됩니다. 메인 창의 상태 표시줄에 표시되는 QProgressBar 은 종종 비모달 진행 상황 대화 상자의 대안으로 사용됩니다.

이 경우 이벤트 루프가 실행 중이어야 하며, ` canceled()` 신호를 작업을 중지하는 슬롯에 연결하고, 일정한 간격으로 ` setValue()`를 호출해야 합니다. 예를 들면 다음과 같습니다:

// Operation constructor
Operation::Operation(QObject *parent)
    : QObject(parent), steps(0)
{
    pd = new QProgressDialog("Operation in progress.", "Cancel", 0, 100);
    connect(pd, &QProgressDialog::canceled, this, &Operation::cancel);
    t = new QTimer(this);
    connect(t, &QTimer::timeout, this, &Operation::perform);
    t->start(0);
}

void Operation::perform()
{
    pd->setValue(steps);
    //... perform one percent of the operation
    steps++;
    if (steps > pd->maximum())
        t->stop();
}

void Operation::cancel()
{
    t->stop();
    //... cleanup
}

두 모드 모두에서 setLabel(), setBar(), setCancelButton()을 사용하여 자식 위젯을 사용자 정의 위젯으로 대체함으로써 진행 상황 대화 상자를 사용자 정의할 수 있습니다. setLabelText() 및 setCancelButtonText() 함수는 표시되는 텍스트를 설정합니다.

Fusion 위젯 스타일로 표시되는 진행 상황 대화 상자.

QDialog 및 QProgressBar도 참조하십시오 .

속성 설명서

autoClose : bool

이 속성은 대화 상자가 ` reset()`에 의해 숨겨지는지 여부와 관계없이 유효합니다.

기본값은 true입니다.

액세스 함수:

bool autoClose() const
void setAutoClose(bool close)

setAutoReset()도 참조하십시오 .

autoReset : bool

이 속성은 진행 상황 대화 상자가 ` value()`의 값이 ` maximum()`와 같아지는 즉시 ` reset()`를 호출하는지 여부를 나타냅니다.

기본값은 true입니다.

관련 함수:

bool autoReset() const
void setAutoReset(bool reset)

setAutoClose()도 참조하십시오 .

labelText : QString

이 속성은 레이블의 텍스트를 저장합니다.

기본 텍스트는 빈 문자열입니다.

액세스 함수:

QString labelText() const
void setLabelText(const QString &text)

maximum : int

이 속성은 진행률 막대가 나타내는 최대 값을 저장합니다.

기본값은 100입니다.

액세스 함수:

int maximum() const
void setMaximum(int maximum)

minimum 및 setRange()도 참조하십시오 .

minimum : int

이 속성은 진행률 막대가 나타내는 최소값을 저장합니다.

기본값은 0입니다.

액세스 함수:

int minimum() const
void setMinimum(int minimum)

maximum 및 setRange()도 참조하십시오 .

minimumDuration : int

이 속성은 대화 상자가 표시되기까지 경과해야 하는 시간을 지정합니다.

작업의 예상 소요 시간이 minimumDuration보다 짧을 경우, 대화 상자는 전혀 표시되지 않습니다. 이는 금방 끝나는 작업에 대해 대화 상자가 뜰 수 있는 것을 방지하기 위함입니다. minimumDuration을 초과할 것으로 예상되는 작업의 경우, minimumDuration 시간이 경과한 후 또는 진행 상황이 설정되는 즉시 대화 상자가 나타납니다.

0으로 설정하면 진행 상황이 기록되는 즉시 항상 대화 상자가 표시됩니다. 기본값은 4000밀리초입니다.

액세스 함수:

int minimumDuration() const
void setMinimumDuration(int ms)

value : int

이 속성은 현재 진행 상황을 나타냅니다.

진행 상황 대화 상자가 예상대로 작동하려면, 처음에 이 속성을 QProgressDialog::minimum()로 설정하고 마지막에 QProgressDialog::maximum()로 설정해야 합니다. 그 사이에는 setValue()를 몇 번이든 호출할 수 있습니다.

경고: 진행 상황 대화 상자가 모달인경우 ( QProgressDialog::QProgressDialog() 참조), setValue()는 QCoreApplication::processEvents()를 호출하므로, 이로 인해 코드에서 원치 않는 재진입이 발생하지 않도록 주의하십시오. 예를 들어, paintEvent() 내부에서 QProgressDialog 를 사용하지 마십시오!

액세스 함수:

int value() const
void setValue(int progress)

minimum 및 maximum도 참조하십시오 .

[read-only] wasCanceled : bool

이 속성은 대화 상자가 취소되었는지 여부를 나타냅니다.

Access 함수:

bool wasCanceled() const

멤버 함수 설명서

[explicit] QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

진행 상황 대화 상자를 생성합니다.

기본 설정:

  • 라벨 텍스트는 비어 있습니다.
  • 취소 버튼의 텍스트는 (번역된) "취소"입니다.
  • 최소값은 0이며;
  • 최대값은 100입니다.

parent 인수는 대화 상자의 상위 위젯입니다. 위젯 플래그( f)는 QDialog::QDialog() 생성자에 전달됩니다.

setLabelText(), setCancelButtonText(), setCancelButton(), setMinimum() 및 setMaximum()도 참조하십시오 .

QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

진행 상황 대화 상자를 생성합니다.

labelText 은 진행 중인 작업을 사용자에게 알리기 위해 사용되는 텍스트입니다.

cancelButtonText 은 취소 버튼에 표시될 텍스트입니다. QString()이 전달되면 취소 버튼이 표시되지 않습니다.

minimum 와 maximum 는 이 진행 상황 대화 상자가 진행 상황을 표시하는 작업의 단계 수입니다. 예를 들어, 작업이 50개의 파일을 검사하는 것이라면 이 값의 최소값은 0이고, 최대값은 50이 됩니다. 첫 번째 파일을 검사하기 전에 setValue(0)을 호출하십시오. 각 파일을 처리할 때마다 setValue(0), setValue(2) 등을 호출하고, 마지막 파일을 검사한 후에는 setValue(50)을 호출합니다.

parent 인수는 대화 상자의 부모 위젯입니다. 부모( parent) 및 위젯 플래그( f)는 QDialog::QDialog() 생성자에 전달됩니다.

setLabelText(), setLabel(), setCancelButtonText(), setCancelButton(), setMinimum() 및 setMaximum()도 참조하십시오 .

[virtual noexcept] QProgressDialog::~QProgressDialog()

진행 상황 대화 상자를 닫습니다.

[slot] void QProgressDialog::cancel()

진행 상황 대화 상자를 초기화합니다. 진행 상황 대화 상자가 초기화될 때까지 ` wasCanceled()`의 반환 값이 `true`가 됩니다. 진행 상황 대화 상자가 숨겨집니다.

[signal] void QProgressDialog::canceled()

이 신호는 취소 버튼을 클릭했을 때 발생합니다. 기본적으로 cancel() 슬롯에 연결되어 있습니다.

wasCanceled()항목도 참조하십시오 .

[override virtual protected] void QProgressDialog::changeEvent(QEvent *ev)

QWidget::changeEvent(QEvent *event)를 재구현합니다.

[override virtual protected] void QProgressDialog::closeEvent(QCloseEvent *e)

QDialog::closeEvent(QCloseEvent *e)를 재구현합니다.

[protected slot] void QProgressDialog::forceShow()

알고리즘이 시작된 후 minimumDuration 밀리초가 경과했음에도 대화 상자가 여전히 숨겨져 있는 경우, 대화 상자를 표시합니다.

setMinimumDuration()도 참조하십시오 .

void QProgressDialog::open(QObject *receiver, const char *member)

대화 상자를 열고, canceled() 신호를 receiver 및 member 로 지정된 슬롯에 연결합니다.

대화 상자가 닫히면 해당 신호는 슬롯에서 분리됩니다.

[slot] void QProgressDialog::reset()

진행 상황 대화 상자를 초기화합니다. autoClose()의 값이 true인 경우 진행 상황 대화 상자가 숨겨집니다.

setAutoClose() 및 setAutoReset()도 참조하십시오 .

[override virtual protected] void QProgressDialog::resizeEvent(QResizeEvent *event)

QDialog::resizeEvent(QResizeEvent *)를 재구현합니다.

void QProgressDialog::setBar(QProgressBar *bar)

진행률 표시줄 위젯을 ` bar`로 설정합니다. 진행률 대화 상자는 크기가 조정되어 이에 맞게 표시됩니다. 진행률 대화 상자는 진행률 객체(` bar `)에 대한 소유권을 가지며, 이 객체는 필요할 때 삭제되므로 스택에 할당된 진행률 표시줄은 사용하지 마십시오.

void QProgressDialog::setCancelButton(QPushButton *cancelButton)

취소 버튼을 푸시 버튼( cancelButton)으로 설정합니다. 진행 상황 대화 상자가 이 버튼에 대한 소유권을 가지며, 필요할 때 이 버튼을 삭제하므로 스택에 있는 객체의 주소를 전달해서는 안 됩니다. 즉, new()를 사용하여 버튼을 생성해야 합니다. nullptr 가 전달되면 취소 버튼이 표시되지 않습니다.

setCancelButtonText()도 참조하십시오 .

[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText)

취소 버튼의 텍스트를 “ cancelButtonText ”로 설정합니다. 텍스트가 QString()으로 설정되면 취소 버튼이 숨겨지고 삭제됩니다.

setCancelButton()도 참조하십시오 .

void QProgressDialog::setLabel(QLabel *label)

라벨을 ` label`로 설정합니다. 진행 상황 대화 상자는 크기가 조정되어 라벨이 들어갈 수 있도록 됩니다. 이 라벨은 진행 상황 대화 상자가 소유하게 되며, 필요할 때 삭제되므로 스택에 있는 객체의 주소를 전달하지 마십시오.

setLabelText()도 참조하십시오 .

[slot] void QProgressDialog::setRange(int minimum, int maximum)

진행 상황 대화 상자의 최소값과 최대값을 각각 minimum 및 maximum 로 설정합니다.

maximum 가 minimum 보다 작을 경우, minimum 이 유일한 유효한 값이 됩니다.

현재 값이 새로운 범위 밖으로 벗어나면, 진행 상황 대화 상자는 reset()을 사용하여 재설정됩니다.

minimum 및 maximum도 참조하십시오 .

[override virtual protected] void QProgressDialog::showEvent(QShowEvent *e)

QDialog::showEvent(QShowEvent *event)을 재구현합니다.

[override virtual] QSize QProgressDialog::sizeHint() const

QDialog::sizeHint() const를 재구현합니다.

진행률 대화 상자의 내용에 맞는 크기를 반환합니다. 진행률 대화 상자는 필요에 따라 크기가 자동으로 조정되므로, 이 함수를 직접 호출할 필요는 없습니다.

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