【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){  //表示按下的是确定键
	//实现自己的业务
	//...
}

注意:如果使用这种方式,那么dialog不能设置setAttribute(Qt::WA_DeleteOnClose);窗口销毁属性,窗口释放会导致发送不了信号。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 中,如果你想在 Activity 中调用公共的自定义 Dialog,并使用确定取消按钮,你可以按照以下步骤进行: 1. 首先,创建一个自定义Dialog ,该需要继承自 Dialog ,并实现确定取消按钮的点击事件。例如: ``` public class MyDialog extends Dialog { private OnDialogButtonClickListener listener; public MyDialog(@NonNull Context context) { super(context); setContentView(R.layout.dialog_layout); Button okButton = findViewById(R.id.ok_button); Button cancelButton = findViewById(R.id.cancel_button); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.onOkButtonClick(); } dismiss(); } }); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.onCancelButtonClick(); } dismiss(); } }); } public void setOnDialogButtonClickListener(OnDialogButtonClickListener listener) { this.listener = listener; } public interface OnDialogButtonClickListener { void onOkButtonClick(); void onCancelButtonClick(); } } ``` 在这个例子中,我们创建了一个 MyDialog ,该继承自 Dialog ,实现了确定取消按钮的点击事件,并提供了一个 OnDialogButtonClickListener 接口,用于在 Activity 中监听确定取消按钮的点击事件。 2. 然后,在 Activity 中通过 LayoutInflater 加载自定义Dialog 布局,并创建 MyDialog 对象。例如: ``` LayoutInflater inflater = LayoutInflater.from(this); View layout = inflater.inflate(R.layout.dialog_layout, null); MyDialog dialog = new MyDialog(this); dialog.setContentView(layout); ``` 在这个例子中,我们使用 LayoutInflater 加载了自定义Dialog 布局,并将其设置为 MyDialog 的内容视图。 3. 接下来,我们需要在 Activity 中实现 OnDialogButtonClickListener 接口,以便监听 MyDialog确定取消按钮的点击事件。例如: ``` dialog.setOnDialogButtonClickListener(new MyDialog.OnDialogButtonClickListener() { @Override public void onOkButtonClick() { // 在这里处理确定按钮的点击事件 } @Override public void onCancelButtonClick() { // 在这里处理取消按钮的点击事件 } }); ``` 在这个例子中,我们使用 setOnDialogButtonClickListener() 方法设置了 MyDialog 的 OnDialogButtonClickListener,以便在 Activity 中监听确定取消按钮的点击事件。 4. 最后,我们需要在 Activity 中调用 MyDialog 的 show() 方法,显示自定义Dialog。例如: ``` dialog.show(); ``` 在这个例子中,我们调用了 MyDialog 的 show() 方法,显示自定义Dialog。 注意,在 Activity 销毁时,需要调用 MyDialog 的 dismiss() 方法,以便释放 Dialog 相关的资源。例如: ``` @Override protected void onDestroy() { super.onDestroy(); if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值