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() 함수는 표시되는 텍스트를 설정합니다.

A progress dialog shown in the Fusion widget style.

QDialogQProgressBar참조하세요 .

속성 문서

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)

minimumsetRange()도 참조하세요 .

minimum : int

이 속성은 진행률 표시줄로 표시되는 가장 낮은 값을 보유합니다.

기본값은 0입니다.

함수에 액세스합니다:

int minimum() const
void setMinimum(int minimum)

maximumsetRange()도 참조하세요 .

minimumDuration : int

이 속성에는 대화 상자가 표시되기까지 경과해야 하는 시간이 저장됩니다.

작업의 예상 지속 시간이 최소 지속 시간보다 작으면 대화 상자가 전혀 표시되지 않습니다. 이렇게 하면 금방 끝나는 작업에 대해 대화 상자가 표시되는 것을 방지할 수 있습니다. 최소 지속 시간을 초과할 것으로 예상되는 작업의 경우 최소 지속 시간 이후 또는 진행률이 설정되는 즉시 대화 상자가 나타납니다.

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)

minimummaximum참조하세요 .

[read-only] wasCanceled : const bool

이 속성은 대화 상자가 취소되었는지 여부를 보유합니다.

액세스 함수입니다:

bool wasCanceled() const

멤버 함수 문서

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

진행률 대화 상자를 작성합니다.

기본 설정입니다:

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

parent 인수는 대화 상자의 부모 위젯입니다. 위젯 플래그인 fQDialog::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()이 전달되면 취소 버튼이 표시되지 않습니다.

minimummaximum 은 이 진행률 대화 상자에 진행률을 표시하는 작업의 단계 수입니다. 예를 들어 50개의 파일을 검사하는 작업의 경우 이 값의 최소값은 0이고 최대값은 50이 됩니다. 첫 번째 파일을 검사하기 전에 setValue(0)을 호출합니다. 각 파일이 처리될 때마다 setValue(1), setValue(2) 등을 호출하고 마지막 파일을 검사한 후 마지막으로 setValue(50)을 호출합니다.

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

setLabelText(), setLabel(), setCancelButtonText(), setCancelButton(), setMinimum() 및 setMaximum()도 참조하세요 .

[virtual noexcept] QProgressDialog::~QProgressDialog()

진행률 대화 상자를 삭제합니다.

[slot] void QProgressDialog::cancel()

진행률 대화 상자를 초기화합니다. wasCanceled()는 진행률 대화 상자가 재설정될 때까지 참이 됩니다. 진행률 대화 상자가 숨겨집니다.

[signal] void QProgressDialog::canceled()

이 신호는 취소 버튼을 클릭할 때 방출됩니다. 기본적으로 cancel() 슬롯에 연결됩니다.

wasCanceled()도 참조하세요 .

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

다시 구현합니다: QWidget::changeEvent(QEvent * 이벤트).

[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() 신호를 receivermember 에 지정된 슬롯에 연결합니다.

대화 상자가 닫히면 신호가 슬롯에서 연결이 끊어집니다.

[slot] void QProgressDialog::reset()

진행률 대화 상자를 초기화합니다. autoClose ()가 참이면 진행률 대화 상자가 숨겨집니다.

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)

진행률 대화 상자의 최소값과 최대값을 각각 minimummaximum 으로 설정합니다.

maximumminimum 보다 작으면 minimum 이 유일한 법적 값이 됩니다.

현재 값이 새 범위를 벗어나면 진행률 대화 상자가 reset()로 재설정됩니다.

minimummaximum참조하세요 .

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

다시 구현합니다: QDialog::showEvent(QShowEvent * 이벤트).

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

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

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

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