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

詳細説明

ダイアログウィンドウは、主に短期的なタスクやユーザーとの短いコミュニケーションに使用されるトップレベルのウィンドウです。QDialogsはモーダルでもモードレスでもかまいません。QDialogs はreturn value を提供することができ、default buttons を持つことができます。QDialogs は、setSizeGripEnabled() を使用して、右下隅にQSizeGrip を持つこともできます。

QDialog (およびQt::Dialog 型を持つ他のウィジェット) は、Qt の他のクラスとは若干異なる方法で親ウィジェットを使用することに注意してください。ダイアログは常にトップレベル・ウィジェットですが、親ウィジェットがある場合、デフォルトの位置は親のトップレベル・ウィジェットの上に置かれます(親ウィジェット自身がトップレベルでない場合)。また、親のタスクバーエントリを共有します。

QDialog ウィジェットの所有権を変更するには、QWidget::setParent() 関数のオーバーロードを使用します。この関数を使用すると、再レンタリングされたウィジェットのウィンドウ・フラグを明示的に設定できます。オーバーロードされた関数を使用すると、ウィジェットのウィンドウ・システム・プロパティを指定するウィンドウ・フラグがクリアされます(特に、Qt::Dialog フラグがリセットされます)。

注意: ダイアログの親子関係は、ダイアログが常に親ウィンドウの上にスタックされることを意味しません。ダイアログが常に上に来るようにするには、ダイアログをモーダルにします。これはダイアログ自体の子ウィンドウにも適用されます。ダイアログの子ウィンドウが常にダイアログの上にあるようにするには、子ウィンドウもモーダルにします。

モーダルダイアログは、同じアプリケーション内の他の可視ウィンドウへの入力をブロックするダイアログです。ユーザーにファイル名を要求するダイアログや、アプリケーションの環境設定を行うダイアログは、通常モーダルです。ダイアログはapplication modal (デフォルト)またはwindow modal

アプリケーションのモーダルダイアログが開かれると、ユーザーはアプリケーションの他のウィンドウにアクセスする前に、ダイアログとの対話を終了し、ダイアログを閉じなければなりません。ウィンドウモーダルダイアログは、ダイアログに関連するウィンドウへのアクセスをブロックするだけで、ユーザーはアプリケーションの他のウィンドウを使い続けることができます。

モーダルダイアログを表示する最も一般的な方法は、open() 関数を呼び出すことです。あるいは、setModal(true) またはsetWindowModality() を呼び出し、show() を呼び出すこともできます。どちらの場合も、ダイアログが表示されると、制御は直ちに呼び出し元に戻されます。ダイアログがいつ閉じられ、return value が何であるかを知るには、finished() シグナルに接続する必要があります。あるいは、accepted ()とrejected ()シグナルに接続することもできます。

カスタムダイアログを実装する場合、ダイアログを閉じて適切な値を返すには、デフォルトのボタン、例えばOKボタンを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 にすることはできません。

拡張性

拡張性とは、ダイアログを2つの方法で表示する機能です:最もよく使われるオプションを表示する部分的なダイアログと、すべてのオプションを表示する完全なダイアログです。通常、拡張可能なダイアログは、最初は部分的なダイアログとして表示されますが、More トグルボタンがあります。ユーザーがMore ボタンを押し下げると、ダイアログが拡張されます。

戻り値(モーダルダイアログ)

モーダルダイアログは、返り値が必要な状況でよく使用されます。例えば、ユーザがOKCancel のどちらを押したかを示すために使用されます。ダイアログは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::windowModalityshow()、exec()も参照してください

sizeGripEnabled : bool

このプロパティは、サイズグリップが有効かどうかを保持する

このプロパティが有効な場合、ダイアログの右下隅にQSizeGrip 。デフォルトでは、サイズグリップは無効です。

アクセス関数

bool isSizeGripEnabled() const
void setSizeGripEnabled(bool)

メンバー関数ドキュメント

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

parent を持つダイアログを構築します。

ダイアログは常にトップレベルのウィジェットですが、親を持つ場合、デフォルトの位置は親の中央になります。また、親のタスクバーエントリを共有します。

ウィジェットフラグf は、QWidget コンストラクタに渡されます。例えば、ダイアログのタイトルバーに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 *event)。

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

再実装:QWidget::contextMenuEvent(QContextMenuEvent *event)。

[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()は非同期で、追加のイベントループを回しません。このため、一連の危険なバグ(exec()でダイアログを開いている間にダイアログの親を削除してしまうなど)が発生するのを防ぐことができます。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 *event)。

[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 *event)。

int QDialog::result() const

一般に、モーダルダイアログの結果コード、Accepted またはRejected を返します。

注意: QMessageBox インスタンスで呼び出された場合、返される値はQMessageBox::StandardButton enumの値です。

ダイアログが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 *event)。

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