Dialog で OK キーを押したときに MainWindow インターフェースで何らかの業務を取得したい場合、たとえば、Mainwindow インターフェースで新規プロジェクトを作成し、新規プロジェクトのダイアログをポップアップして、そのプロジェクトで取得した情報を表示します。 MainWindow インターフェースへの新しい Project インターフェース, この時点で, ダイアログで信号を送る必要があります. つまり
//Dialog.h
//省略其他代码
//...
signal:
emit signalOkClicked;
//Dialog.cpp
//省略其他代码
//...
connect(btnOK, &QPushButton::clicked, this, &Dialoh::signalOkClicked);
次に、このシグナルを MainWindow で受信し、スロット関数 slotDiaOkClicked で独自のビジネスを実装できます。
//MainWindow.cpp
//...省略一些代码
Dialog* dialog = new Dialog(this);
connect(Dialog, &Dialog::signalOkClicked, this, &Mainwindow::slotDiaOkClicked)
このように書くのは面倒で、信号の送信が必要で、それを受け取ってからスロット関数をここに書きます。
現時点では、QPushButton クラスを直接使用してボタンを追加する代わりに、QDialogButtonBox クラスを使用してボタンを追加できます。
//Dialog.cpp
//其他布局省略
//...
//添加按钮
QDialogButtonBox* btnBox = new QDialogButtonBox(Qt::Horizontal, this);
QPushButton* btnOk = btnBox->addButton(tr("确定"), QDialogButtonBox::AcceptRole);
QPushButton* btnCancel = btnBox->addButton(tr("取消"), QDialogButtonBox::RejectRole);
btnOk->setMinimumHeight(28);
btnOk->setMinimumWidth(60);
btnCancel->setMinimumHeight(28);
btnCancel->setMinimumWidth(60);
ロール (QDialogButtonBox::AcceptRole) を追加する役割は、外部で exec() を呼び出して、QDialog の戻り値を決定することです。
QDialogButtonBox はボタンを追加するときに Role ロールをボタンに追加できます. これは非常に重要です. このようにして, 外部で呼び出されたときに, シグナルを接続して送信する代わりに, ダイアログがどのボタンを押しているかを直接判断するために使用できますif(dialog->exec()== QDialog::Accepted)
.ボタンのコネクト機能とスロット機能。
//MainWindow.cpp
Dialog* dialog = new Dialog(this);
if(dialog->exec()== QDialog::Accepted){
//表示按下的是确定键
//实现自己的业务
//...
}