3

初めての qt ウィンドウを作成しました。ここで、qt を使用して最初のダイアログを作成したいと思います。基本的に QDialogBu​​ttonBox で作成されたダイアログの作成が完了したところで、それをウィンドウに接続したいと思います。初歩的な質問が 2 つあります。

  • 新しいダイアログを作成し、 dialog->show() を呼び出す window.cpp から、ダイアログがどのように閉じられたか ([OK] を押すか、[キャンセル] を押すか) を取得するにはどうすればよいですか?
  • ダイアログポインタをどこでどのように破棄するのですか?
4

3 に答える 3

2

使用する場合はdialog->show()、非モーダル ダイアログであると想定します。

ドキュメンテーションが示すように、シグナルを作成し、ダイアログのスロットとQDialogButtonBox接続した場合、ダイアログは、閉じられた方法を判断できるシグナルをさらに放出します。accept()reject()finished(int)accepted()rejected()

さらにカスタマイズされた動作が必要な場合はcloseEvent(QCloseEvent *event)、独自のシグナルを再実装または作成できます。

ダイアログを削除する必要がある場合はsetAttribute(Qt::WA_DeleteOnClose, true);、閉じるときにインスタンスを削除する を使用できます。

于 2013-01-04T06:38:42.117 に答える
1
  • 最初の質問:

    ダイアログを表示したい場合は、それを使用して構築するだけですmyDialog *d = new myDialog(this)(ダイアログの親を指定した場合、Qtがこれを処理するため、作成したポインターを削除する必要はありません)。モーダル ダイアログが必要な場合は使用する非モーダルにする場合は d->show() を使用します。d->exec()

  • 2 番目の質問:

    ダイアログの親オブジェクトを指定したら、必要なのはそれを使用して、メモリ管理をそのままにしておくだけです。Qt がこれを行います。またd->setAttribute(Qt::WA_DeleteOnClose,true)、閉じたときにそれ自体を破壊するために使用することもできます。

QDialogButtonBoxをダイアログのアクションにリンクすることを忘れないでください。

于 2013-01-04T10:25:48.643 に答える
1

1 つのフラグとシグナルとスロットを使用できます。OK flag=1 を置くと、キャンセルするときは flag=-1 になります。信号を使用します。window.h に、1 つの単純なスロットでそのフラグを処理する方法をコードで記述します。

ポインターを破棄するには、ダイアログでシグナルとスロットを使用して、ユーザーが [OK] または [キャンセル] を押したとき、または終了 (直立 (赤い十字)) してスロットに移動し、ダイアログのデストラクタを呼び出すことができます

また、ダイアログの親をウィンドウに設定することをお勧めします。

于 2013-01-04T06:38:47.600 に答える