QDialog Class
QDialogクラスはダイアログウィンドウの基本クラスです。詳細...
Header: | #include <QDialog> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Inherits: | QWidget |
Inherited By: | QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, and 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 |
詳細説明
ダイアログウィンドウは、主に短期的なタスクやユーザとの短いコミュニケーションに使用されるトップレベルのウィンドウです。QDialogsはモーダルでもモードレスでもかまいません。QDialogs はreturn value を提供することができ、default buttons を持つことができます。QDialogs は、setSizeGripEnabled() を使用して、右下隅にQSizeGrip を持つこともできます。
QDialog(およびQt::Dialog
型を持つ他のウィジェット)は、Qt の他のクラスとは若干異なる方法で親ウィジェットを使用することに注意してください。ダイアログは常にトップレベル・ウィジェットですが、親ウィジェットがある場合、デフォルトの位置は親のトップレベル・ウィジェットの上に置かれます(親ウィジェット自身がトップレベルでない場合)。また、親のタスクバーエントリを共有します。
QDialog ウィジェットの所有権を変更するには、QWidget::setParent() 関数のオーバーロードを使用します。この関数を使用すると、再レンタリングされたウィジェットのウィンドウ・フラグを明示的に設定することができます。オーバーロードされた関数を使用すると、ウィジェットのウィンドウ・システム・プロパティを指定するウィンドウ・フラグがクリアされます(特に、Qt::Dialog フラグがリセットされます)。
注意: ダイアログの親子関係は、ダイアログが常に親ウィンドウの上にスタックされることを意味しません。ダイアログが常に上に来るようにするには、ダイアログをモーダルにします。これはダイアログ自体の子ウィンドウにも適用されます。ダイアログの子ウィンドウが常にダイアログの上にあるようにするには、子ウィンドウもモーダルにします。
モーダルダイアログ
モーダルダイアログは、同じアプリケーション内の他の可視ウィンドウへの入力をブロックするダイアログです。ユーザーにファイル名を要求するダイアログや、アプリケーションの環境設定を行うダイアログは、通常モーダルです。ダイアログはapplication modal (デフォルト)またはwindow modal 。
アプリケーションのモーダルダイアログが開かれると、ユーザーはアプリケーションの他のウィンドウにアクセスする前に、ダイアログとの対話を終了し、ダイアログを閉じなければなりません。ウィンドウモーダルダイアログは、ダイアログに関連するウィンドウへのアクセスをブロックするだけで、ユーザーはアプリケーションの他のウィンドウを使い続けることができます。
モーダルダイアログを表示する最も一般的な方法は、exec() 関数を呼び出すことです。ユーザがダイアログを閉じると、exec() は便利なreturn value を提供します。ダイアログを閉じて適切な値を返すには、デフォルトのボタン、例えばOK ボタンをaccept() スロットに、Cancel ボタンをreject() スロットに接続する必要があります。あるいは、Accepted
またはRejected
でdone() スロットを呼び出すこともできます。
また、setModal (true)またはsetWindowModality ()を呼 び出してから、show ()を呼び出す方法もある。exec() と異なり、show() は、制御を直ちに呼び出し元に戻す。setModal(true)を呼び出すと、進行ダイアログで特に便利です。このダイアログでは、ユーザはダイアログと対話することができます。show() とsetModal(true) を一緒に使用して長い操作を実行する場合、ユーザがダイアログと対話できるように、処理中にQCoreApplication::processEvents() を定期的に呼び出す必要があります。(QProgressDialog を参照)。
モデルレス・ダイアログ
モデルレスダイアログは、同じアプリケーション内の他のウィンドウとは独立して動作するダイアログです。ワープロの検索と置換ダイアログは、ユーザーがアプリケーションのメインウィンドウとダイアログの両方を操作できるようにするために、しばしばモデルレスになっています。
モデルレスダイアログは、show()を使って表示され、すぐに呼び出し元に制御を戻します。
ダイアログを非表示にした後にshow() 関数を呼び出すと、ダイアログは元の位置に表示されます。これは、プログラマが明示的に配置していないウィンドウの位置は、ウィンドウ・マネージャが決定するためです。ユーザーによって移動されたダイアログの位置を保持するには、closeEvent ()ハンドラにその位置を保存し、ダイアログをその位置に移動してから、再び表示します。
デフォルトのボタン
ダイアログのデフォルトボタンは、ユーザーがEnter(Return)を押したときに押されるボタンです。このボタンは、ユーザーがダイアログの設定を受け入れ、ダイアログを閉じたいことを示すために使用されます。QPushButton::setDefault(),QPushButton::isDefault(),QPushButton::autoDefault() を使用して、ダイアログのデフォルトボタンを設定し、制御します。
エスケープキー
ユーザがダイアログでEscキーを押すと、QDialog::reject() が呼び出されます。これによりウィンドウが閉じます:close event をignored にすることはできません。
拡張性
拡張性とは、ダイアログを2つの方法で表示する機能です:最もよく使われるオプションを表示する部分的なダイアログと、すべてのオプションを表示する完全なダイアログです。通常、拡張可能なダイアログは、最初は部分的なダイアログとして表示されますが、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,標準ダイアログの例も参照してください 。
プロパティ Documentation
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
に設定します。
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 を発信します。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()
このシグナルは、ユーザーによって、または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 。
©2024 The Qt Company Ltd. 本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。