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 } |
プロパティ
- modal : bool
- sizeGripEnabled : bool
パブリック関数
| 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() |
シグナル
再実装された保護関数
| 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 |
詳細な説明
ダイアログウィンドウは、主に短期的なタスクやユーザーとの簡潔なコミュニケーションに使用されるトップレベルウィンドウです。QDialogはモーダルまたはモーレスになる場合があります。QDialogはreturn value を提供でき、default buttons を持つことができます。また、setSizeGripEnabled()を使用することで、QDialogの右下隅にQSizeGrip を表示させることもできます。
QDialog(およびQt::Dialog 型を持つその他のウィジェット)は、Qtの他のクラスとは若干異なる方法で親ウィジェットを使用することに注意してください。ダイアログは常にトップレベルウィジェットですが、親を持つ場合、そのデフォルトの位置は親のトップレベルウィジェットの上中央になります(ダイアログ自体がトップレベルでない場合)。 また、親ウィジェットのタスクバーエントリも共有します。
QWidget::setParent() 関数のオーバーロードを使用して、QDialog ウィジェットの所有権を変更します。この関数を使用すると、親を変更したウィジェットのウィンドウフラグを明示的に設定できます。オーバーロードされた関数を使用すると、ウィジェットのウィンドウシステムプロパティを指定するウィンドウフラグがクリアされます(特に、Qt::Dialog フラグがリセットされます)。
注: ダイアログの親関係があるからといって 、そのダイアログが常に親ウィンドウの上に重ねられるとは限りません。ダイアログを常に最前面に表示させるには、ダイアログをモーダルにします。これは、ダイアログ自体の子ウィンドウにも当てはまります。ダイアログの子ウィンドウをダイアログの上に表示させ続けるには、それらの子ウィンドウも同様にモーダルにします。
モーダルダイアログ
モーダルダイアログとは、同じアプリケーション内の他の表示中のウィンドウへの入力をブロックするダイアログのことです。ユーザーにファイル名の入力を求めるダイアログや、アプリケーションの設定を行うダイアログは、通常モーダルです。ダイアログは、application modal (デフォルト)またはwindow modal のいずれかに設定できます。
アプリケーションのモーダルダイアログが開かれると、ユーザーはダイアログとの操作を完了し、ダイアログを閉じるまで、アプリケーション内の他のウィンドウにアクセスできなくなります。ウィンドウのモーダルダイアログは、そのダイアログに関連付けられたウィンドウへのアクセスのみをブロックするため、ユーザーはアプリケーション内の他のウィンドウを引き続き使用することができます。
モーダルダイアログを表示する最も一般的な方法は、そのopen()関数を呼び出すことです。あるいは、setModal(true)またはsetWindowModality()を呼び出し、その後show()を呼び出すこともできます。いずれの場合も、ダイアログが表示されると、制御は直ちに呼び出し元に返されます。 ダイアログが閉じられたタイミングや、そのreturn value が何であるかを知るには、finished()シグナルに接続する必要があります。あるいは、accepted()およびrejected()シグナルに接続することもできます。
カスタムダイアログを実装する際、ダイアログを閉じ、適切な値を返すには、デフォルトボタン(たとえば「OK」ボタン)をaccept()スロットに、キャンセルボタンをreject()スロットに接続します。あるいは、Accepted またはRejected を指定して、done()スロットを呼び出すこともできます。
長時間かかる操作を実行するためにモーダルダイアログを表示する場合は、GUIスレッドに干渉しないよう、その操作をバックグラウンドのワーカースレッドで実行することをお勧めします。
注: exec() を呼び出すことで、モーダルダイアログをブロッキングモードで表示する方法があります。 この場合、コントロールはダイアログが閉じられたときにのみ GUI スレッドに戻ります。ただし、このアプローチはネストされたイベントループを生成するため、一部のプラットフォームでは完全にはサポートされていないことから、推奨されません。
モードレス・ダイアログ
モードレスダイアログとは、同じアプリケーション内の他のウィンドウとは独立して動作するダイアログのことです。ワープロソフトの「検索と置換」ダイアログは、ユーザーがアプリケーションのメインウィンドウとダイアログの両方と対話できるようにするため、多くの場合モードレスになっています。
モードレスダイアログは、show() を使用して表示され、この関数は呼び出し元に直ちに制御を戻します。
ダイアログを非表示にした後にshow()関数を呼び出すと、ダイアログは元の位置に表示されます。これは、プログラマによって明示的に配置されていないウィンドウの位置は、ウィンドウマネージャが決定するためです。 ユーザーが移動させたダイアログの位置を維持するには、closeEvent() ハンドラでその位置を保存し、ダイアログを再度表示する前にその位置へ移動させてください。
デフォルトのボタン
ダイアログのデフォルトボタンとは、ユーザーが Enter キー(Return キー)を押した際に押下されるボタンのことです。このボタンは、ユーザーがダイアログの設定を受け入れ、ダイアログを閉じたいことを示すために使用されます。QPushButton::setDefault()、QPushButton::isDefault()、およびQPushButton::autoDefault() を使用して、ダイアログのデフォルトボタンを設定および制御します。
Escキー
ユーザーがダイアログ内で Esc キーを押すと、QDialog::reject() が呼び出されます。これによりウィンドウが閉じられます。close event はignored にすることはできません。
拡張性
拡張性とは、ダイアログを 2 つの方法で表示できる機能のことです。1 つは、最もよく使用されるオプションのみを表示する「部分ダイアログ」、もう 1 つはすべてのオプションを表示する「完全ダイアログ」です。通常、拡張可能なダイアログは、最初は部分ダイアログとして表示されますが、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 」、および「標準ダイアログの例」も参照してください 。
プロパティのドキュメント
modal : bool
このプロパティは、show() がダイアログをモーダル表示で表示するか、モーダルレス表示で表示するかを決定します。
デフォルトでは、このプロパティはfalse に設定されており、show()はダイアログをモデルレスで表示します。このプロパティをtrueに設定することは、QWidget::windowModality をQt::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 を持つダイアログを作成します。
ダイアログは常に最上位のウィジェットですが、親がある場合、そのデフォルトの位置は親ウィジェットの上部中央になります。また、親ウィジェットのタスクバーエントリも共有します。
ウィジェットフラグ `f ` は、`QWidget ` コンストラクタに渡されます。たとえば、ダイアログのタイトルバーに「What's This」ボタンを表示したくない場合は、`f` で `Qt::WindowTitleHint ` | `Qt::WindowSystemMenuHint ` を渡してください。
QWidget::setWindowFlags()も参照してください 。
[virtual noexcept] QDialog::~QDialog()
QDialog を破棄し、そのすべての子要素を削除します。
[virtual slot] void QDialog::accept()
モーダルダイアログを非表示にし、結果コードをAccepted に設定します。
[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 を発行します。r がQDialog::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() を使用する場合、QDialog のfinished() シグナルを接続することで、ダイアログが閉じられた際に通知を受け取ることができます。
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 に設定します。
[signal] void QDialog::rejected()
このシグナルは、ユーザーによってダイアログが閉じられた場合、または `reject()` または `done()` を `QDialog::Rejected ` 引数とともに呼び出してダイアログが閉じられた場合に発火します。
なお、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 列挙型の値となります。
ダイアログが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 」のアクセス関数を再実装します。
© 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.