QDialog Class

QDialog 클래스는 대화창의 기본 클래스입니다. 더 보기...

헤더: #include <QDialog>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속합니다: QWidget
상속받는 사람:

QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, 그리고 QWizard

공용 유형

enum DialogCode { Accepted, Rejected }

속성

공용 함수

QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtual ~QDialog()
bool isSizeGripEnabled() const
int result() const
void setModal(bool modal)
void setResult(int i)
void setSizeGripEnabled(bool)

재구현된 공용 함수

virtual QSize minimumSizeHint() const override
virtual void setVisible(bool visible) override
virtual QSize sizeHint() const override

공용 슬롯

virtual void accept()
virtual void done(int r)
virtual int exec()
virtual void open()
virtual void reject()

신호

void accepted()
void finished(int result)
void rejected()

재구현된 보호 함수

virtual void closeEvent(QCloseEvent *e) override
virtual void contextMenuEvent(QContextMenuEvent *e) override
virtual bool eventFilter(QObject *o, QEvent *e) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void resizeEvent(QResizeEvent *) override
virtual void showEvent(QShowEvent *event) override

상세 설명

대화창은 주로 단기 작업 및 사용자와의 간단한 커뮤니케이션에 사용되는 최상위 창입니다. Q다이얼로그는 모달 또는 모델이 없을 수 있습니다. QDialog는 return value 를 제공할 수 있으며 default buttons 을 가질 수 있습니다. 또한 setSizeGripEnabled()을 사용하여 오른쪽 아래 모서리에 QSizeGrip 을 포함할 수도 있습니다.

QDialog (및 Qt::Dialog 타입의 다른 위젯)는 Qt의 다른 클래스와 약간 다르게 부모 위젯을 사용한다는 점에 유의하십시오. 대화 상자는 항상 최상위 위젯이지만, 부모가 있는 경우 기본 위치는 부모가 최상위 위젯의 중앙에 위치합니다(부모 자체가 최상위 위젯이 아닌 경우). 또한 부모의 작업 표시줄 항목을 공유합니다.

QWidget::setParent() 함수의 오버로드를 사용하여 QDialog 위젯의 소유권을 변경할 수 있습니다. 이 함수를 사용하면 다시 부모가 된 위젯의 창 플래그를 명시적으로 설정할 수 있으며, 오버로드된 함수를 사용하면 위젯의 창 시스템 속성을 지정하는 창 플래그가 지워집니다(특히 Qt::Dialog 플래그가 재설정됩니다).

참고: 대화 상자의 상위 관계는 대화 상자가 항상 상위 창 위에 스택된다는 것을 의미하지는 않습니다. 대화 상자가 항상 상단에 표시되도록 하려면 대화 상자를 모달로 설정하세요. 이는 대화 상자 자체의 자식 창에도 적용됩니다. 대화 상자의 자식 창이 항상 대화 상자 위에 유지되도록 하려면 자식 창도 모달로 만드세요.

모달 대화 상자는 동일한 애플리케이션에서 보이는 다른 창에 대한 입력을 차단하는 대화 상자입니다. 사용자에게 파일 이름을 요청하는 데 사용되는 대화 상자나 애플리케이션 기본 설정을 지정하는 데 사용되는 대화 상자는 일반적으로 모달 대화 상자입니다. 대화 상자는 application modal (기본값) 또는 window modal 일 수 있습니다.

애플리케이션 모달 대화 상자가 열리면 사용자는 대화 상자와의 상호 작용을 완료하고 대화 상자를 닫아야 애플리케이션의 다른 창에 액세스할 수 있습니다. 창 모달 대화 상자는 대화 상자와 연결된 창에 대한 액세스만 차단하므로 사용자는 애플리케이션의 다른 창을 계속 사용할 수 있습니다.

모달 대화 상자를 표시하는 가장 일반적인 방법은 open() 함수를 호출하는 것입니다. 또는 setModal(true) 또는 setWindowModality()를 호출한 다음 show()를 호출할 수도 있습니다. 두 경우 모두 대화 상자가 표시되면 즉시 호출자에게 컨트롤이 반환됩니다. 대화 상자가 닫히는 시점과 해당 return value 을 확인하려면 finished() 신호에 연결해야 합니다. 또는 accepted() 및 rejected() 신호에 연결할 수도 있습니다.

사용자 지정 대화 상자를 구현할 때 대화 상자를 닫고 적절한 값을 반환하려면 기본 버튼(예: 확인 버튼)은 accept() 슬롯에 연결하고 취소 버튼은 reject() 슬롯에 연결합니다. 또는 Accepted 또는 Rejected 을 사용하여 done() 슬롯을 호출할 수도 있습니다.

모달 대화 상자를 표시하여 오래 실행되는 작업을 수행하는 경우에는 백그라운드 작업자 스레드에서 작업을 수행하여 GUI 스레드를 방해하지 않도록 하는 것이 좋습니다.

경고: open () 또는 show()를 사용하는 경우 컨트롤이 호출자에게 반환되는 즉시 파괴되지 않도록 스택에 모달 대화 상자를 만들지 않아야 합니다.

참고: exec()를 호출하여 차단 모드에서 모달 대화 상자를 표시하는 방법이 있습니다. 이 경우 컨트롤은 대화 상자가 닫힐 때만 GUI 스레드로 돌아갑니다. 그러나 이러한 접근 방식은 일부 플랫폼에서 완전히 지원되지 않는 중첩 이벤트 루프를 생성하므로 권장하지 않습니다.

모델리스 대화 상자

모델리스 대화 상자는 동일한 애플리케이션의 다른 창과 독립적으로 작동하는 대화 상자입니다. 워드 프로세서의 찾기 및 바꾸기 대화 상자는 사용자가 애플리케이션의 기본 창과 대화 상자 모두와 상호 작용할 수 있도록 모델리스인 경우가 많습니다.

모델리스 대화 상자는 show()를 사용하여 표시되며, 호출자에게 즉시 제어권을 반환합니다.

대화 상자를 숨긴 후 show() 함수를 호출하면 대화 상자가 원래 위치에 표시됩니다. 이는 프로그래머가 명시적으로 배치하지 않은 창에 대해서는 창 관리자가 위치를 결정하기 때문입니다. 사용자가 이동한 대화 상자의 위치를 유지하려면 closeEvent() 핸들러에 해당 위치를 저장한 다음 대화 상자를 해당 위치로 이동한 다음 다시 표시합니다.

기본 버튼

대화 상자의 기본 버튼은 사용자가 Enter(Return)을 누를 때 누르는 버튼입니다. 이 버튼은 사용자가 대화 상자의 설정을 수락하고 대화 상자를 닫으려는 것을 나타내는 데 사용됩니다. QPushButton::setDefault (), QPushButton::isDefault() 및 QPushButton::autoDefault()를 사용하여 대화 상자의 기본 버튼을 설정하고 제어할 수 있습니다.

이스케이프 키

사용자가 대화 상자에서 Esc 키를 누르면 QDialog::reject()가 호출됩니다. 그러면 창이 닫힙니다: close eventignored 이 될 수 없습니다.

확장성

확장성은 대화 상자를 가장 일반적으로 사용되는 옵션을 표시하는 부분 대화 상자와 모든 옵션을 표시하는 전체 대화 상자의 두 가지 방식으로 표시할 수 있는 기능입니다. 일반적으로 확장 가능한 대화 상자는 처음에는 부분 대화 상자로 표시되지만 More 토글 버튼이 있습니다. 사용자가 More 버튼을 아래로 누르면 대화 상자가 확장됩니다.

반환 값(모달 대화 상자)

모달 대화 상자는 사용자가 OK 또는 Cancel 을 눌렀는지 여부를 표시하는 등 반환 값이 필요한 상황에서 자주 사용됩니다. 대화 상자는 accept() 또는 reject() 슬롯을 호출하여 닫을 수 있으며, exec()은 Accepted 또는 Rejected 을 적절히 반환합니다. exec () 호출은 대화 상자의 결과를 반환합니다. 대화 상자가 삭제되지 않은 경우 result()에서도 결과를 확인할 수 있습니다.

대화 상자의 닫기 동작을 수정하려면 accept(), reject() 또는 done() 함수를 다시 구현할 수 있습니다. closeEvent () 함수는 대화 상자의 위치를 유지하거나 표준 닫기 또는 거부 동작을 재정의하기 위해서만 다시 구현해야 합니다.

코드 예시

모달 대화 상자:

void EditorWindow::countWords()
{
    WordCountDialog dialog(this);
    dialog.setWordCount(document().wordCount());
    dialog.exec();
}

모델 없는 대화상자입니다:

void EditorWindow::find()
{
    if (!findDialog) {
        findDialog = new FindDialog(this);
        connect(findDialog, &FindDialog::findNext,
                this, &EditorWindow::findNext);
    }

    findDialog->show();
    findDialog->raise();
    findDialog->activateWindow();
}

확장자가 있는 대화 상자입니다:

    mainLayout->setSizeConstraint(QLayout::SetFixedSize);

    findButton = new QPushButton(tr("&Find"));
    moreButton = new QPushButton(tr("&More..."));
    moreButton->setCheckable(true);

    extension = new ExtendedControls;
    mainLayout->addWidget(extension);
    extension->hide();

    connect(moreButton, &QAbstractButton::toggled, extension, &QWidget::setVisible);

대화 상자 레이아웃의 sizeConstraint 속성을 SetFixedSize 으로 설정하면 사용자가 대화 상자의 크기를 조정할 수 없으며 확장자가 숨겨지면 대화 상자가 자동으로 축소됩니다.

QDialogButtonBox, QTabWidget, QWidget, QProgressDialog표준 대화 상자 예시도참조하세요 .

회원 유형 문서

enum QDialog::DialogCode

모달 대화 상자에서 반환되는 값입니다.

상수
QDialog::Accepted1
QDialog::Rejected0

프로퍼티 문서

이 속성은 show()가 대화 상자를 모달로 표시할지 모델 없이 표시할지 여부를 저장합니다.

기본적으로 이 속성은 false 이며 show()은 대화 상자를 모델 없이 팝업합니다. 이 속성을 true로 설정하면 QWidget::windowModalityQt::ApplicationModal 으로 설정하는 것과 같습니다.

exec()는 이 속성 값을 무시하고 항상 대화 상자를 모달로 팝업합니다.

함수 액세스:

bool isModal() const
void setModal(bool modal)

QWidget::windowModality, show() 및 exec()도 참조하세요 .

sizeGripEnabled : bool

이 속성은 크기 그립의 활성화 여부를 보유합니다.

이 속성이 활성화되면 대화 상자의 오른쪽 하단에 QSizeGrip 이 표시됩니다. 기본적으로 크기 그립은 비활성화되어 있습니다.

함수에 액세스합니다:

bool isSizeGripEnabled() const
void setSizeGripEnabled(bool)

멤버 함수 문서

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

부모가 있는 대화 상자를 만듭니다 parent.

대화 상자는 항상 최상위 위젯이지만 부모가 있는 경우 기본 위치는 부모 상단의 중앙에 있습니다. 또한 부모의 작업 표시줄 항목을 공유합니다.

위젯 플래그 fQWidget 생성자에 전달됩니다. 예를 들어 대화 상자의 제목 표시줄에 What's This 버튼을 표시하지 않으려면 fQt::WindowTitleHint | Qt::WindowSystemMenuHint 을 전달하세요.

QWidget::setWindowFlags()도 참조하세요 .

[virtual noexcept] QDialog::~QDialog()

QDialog 를 파괴하여 모든 하위 항목을 삭제합니다.

[virtual slot] void QDialog::accept()

모달 대화 상자를 숨기고 결과 코드를 Accepted 로 설정합니다.

reject() 및 done()도 참조하세요 .

[signal] void QDialog::accepted()

이 신호는 사용자가 대화 상자를 수락하거나 QDialog::Accepted 인수를 사용하여 accept() 또는 done()을 호출하여 대화 상자를 수락한 경우에 발생합니다.

hide() 또는 setVisible(false)로 대화 상자를 숨길 때는 이 신호가 발생하지 않습니다. 여기에는 대화 상자가 표시된 상태에서 대화 상자를 삭제하는 경우도 포함됩니다.

finished() 및 rejected()도 참조하세요 .

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

다시 구현합니다: QWidget::closeEvent(QCloseEvent * 이벤트).

[override virtual protected] void QDialog::contextMenuEvent(QContextMenuEvent *e)

다시 구현합니다: QWidget::contextMenuEvent(QContextMenuEvent * 이벤트).

[virtual slot] void QDialog::done(int r)

대화 상자를 닫고 결과 코드를 r 로 설정합니다. finished() 신호는 r 를 보내고, rQDialog::Accepted 또는 QDialog::Rejected 인 경우 accepted() 또는 rejected() 신호도 각각 내보냅니다.

이 대화 상자가 exec()와 함께 표시되는 경우 done() 역시 로컬 이벤트 루프를 종료하고 exec()는 r 를 반환합니다.

QWidget::close()와 마찬가지로 Qt::WA_DeleteOnClose 플래그가 설정된 경우 done()는 대화 상자를 삭제합니다. 대화 상자가 애플리케이션의 기본 위젯인 경우 애플리케이션이 종료됩니다. 대화 상자가 마지막으로 닫힌 창인 경우 QGuiApplication::lastWindowClosed() 신호가 전송됩니다.

accept(), reject(), QApplication::activeWindow() 및 QCoreApplication::quit()도 참조하세요 .

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

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

[virtual slot] int QDialog::exec()

대화 상자를 modal dialog 로 표시하여 사용자가 닫을 때까지 차단합니다. 이 함수는 DialogCode 결과를 반환합니다.

대화 상자가 application modal 인 경우 사용자는 대화 상자를 닫을 때까지 동일한 애플리케이션의 다른 창과 상호 작용할 수 없습니다. 대화 상자가 window modal 인 경우 대화 상자가 열려 있는 동안에는 상위 창과의 상호 작용만 차단됩니다. 기본적으로 대화 상자는 애플리케이션 모달입니다.

참고: 이 함수를 사용하지 말고 대신 open() 을 사용하세요. exec()와 달리 open()는 비동기식이며 추가 이벤트 루프를 돌리지 않습니다. 따라서 일련의 위험한 버그(예: 실행()을 통해 대화 상자가 열려 있는 동안 대화 상자의 부모를 삭제하는 경우)가 발생하는 것을 방지할 수 있습니다. open ()를 사용하는 경우 QDialogfinished() 신호에 연결하여 대화 상자가 닫힐 때 알림을 받을 수 있습니다.

open(), show(), result() 및 setWindowModality()도 참조하세요 .

[signal] void QDialog::finished(int result)

이 신호는 사용자가 또는 done(), accept() 또는 reject()를 호출하여 대화 상자의 result 코드가 설정된 경우에 발생합니다.

hide() 또는 setVisible(false)로 대화 상자를 숨길 때는 이 신호가 발생하지 않습니다. 여기에는 대화 상자가 표시된 상태에서 대화 상자를 삭제하는 경우도 포함됩니다.

accepted() 및 rejected()도 참조하세요 .

[override virtual protected] void QDialog::keyPressEvent(QKeyEvent *e)

다시 구현합니다: QWidget::keyPressEvent(QKeyEvent * 이벤트).

[override virtual] QSize QDialog::minimumSizeHint() const

속성에 대한 액세스 함수를 다시 구현합니다: QWidget::minimumSizeHint.

[virtual slot] void QDialog::open()

대화 상자를 window modal dialog 로 표시하고 즉시 반환합니다.

exec(), show(), result() 및 setWindowModality()도 참조하세요 .

[virtual slot] void QDialog::reject()

모달 대화 상자를 숨기고 결과 코드를 Rejected 로 설정합니다.

accept() 및 done()도 참조하세요 .

[signal] void QDialog::rejected()

이 신호는 사용자가 대화 상자를 거부했거나 QDialog::Rejected 인수를 사용하여 reject() 또는 done()을 호출하여 대화 상자가 거부된 경우에 발생합니다.

hide() 또는 setVisible(false)로 대화 상자를 숨길 때는 이 신호가 발생하지 않습니다. 여기에는 대화 상자가 표시된 상태에서 대화 상자를 삭제하는 경우도 포함됩니다.

finished() 및 accepted()도 참조하세요 .

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

다시 구현합니다: QWidget::resizeEvent(QResizeEvent * 이벤트).

int QDialog::result() const

일반적으로 모달 대화 상자의 결과 코드인 Accepted 또는 Rejected 을 반환합니다.

참고: QMessageBox 인스턴스에서 호출하면 반환되는 값은 QMessageBox::StandardButton 열거형 값입니다.

대화 상자가 Qt::WA_DeleteOnClose 속성으로 구성된 경우에는 이 함수를 호출하지 마세요.

setResult()도 참조하세요 .

void QDialog::setResult(int i)

모달 대화 상자의 결과 코드를 i 로 설정합니다.

참고: QDialog::DialogCode 에 정의된 값 중 하나를 사용하는 것이 좋습니다.

result()도 참조하세요 .

[override virtual] void QDialog::setVisible(bool visible)

속성에 대한 액세스 함수를 다시 구현합니다: QWidget::visible.

[override virtual protected] void QDialog::showEvent(QShowEvent *event)

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

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

속성에 대한 액세스 함수를 다시 구현합니다: QWidget::sizeHint.

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