【QT】如何为自定义的Dialog添加确定取消按钮,可以使用QDialogButtonBox类

如果你想在MainWindo界面中得到Dialog中按下确定键时的一些业务,例如,在Mainwindow界面新建项目,弹出新建项目的dialog,然后将新建项目界面获得的信息显示到MainWindow界面中,此时,你就需要在Dialog中发送一个信号,即

//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)

这样写的话就是感觉比较繁琐,需要信号传信号,这边接收再写槽函数。

这时可以使用QDialogButtonBox类来添加按钮,而不是直接使用QPushButton类来添加按钮。

//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)来判断dialog按下的是哪个按钮,而不用connect再传递一个信号给外面,也就不用接收确定按钮的connect函数和槽函数。

//MainWindow.cpp

Dialog* dialog = new Dialog(this);
if(dialog->exec()== QDialog::Accepted){
    
      //表示按下的是确定键
	//实现自己的业务
	//...
}

猜你喜欢

转载自blog.csdn.net/WL0616/article/details/130231783
今日推荐