QT,对话框QDialog关闭时处理事件

请大家先看看这两位博主写的文章:
QT关闭处理事件
Qt笔记:窗口关闭事件处理
综合有:
CamDialog.h文件中

//CamDialog.h文件
#ifndef CAMDIALOG_H
#define CAMDIALOG_H

#include <QDialog>

namespace Ui {
class CamDialog;
}

class CamDialog : public QDialog
{
    Q_OBJECT

public:
    explicit CamDialog(QWidget *parent = 0);
    ~CamDialog();
    
    void reject();//重写虚函数。这里是函数的声明

private:
    Ui::CamDialog *ui;
};

#endif // CAMDIALOG_H

任意.cpp文件中 实现虚函数的定义

void CamDialog::reject()
{
    controlForm::speechPublic->say("已关闭对话框");//需要包含头文件#include <QTextToSpeech>
    QDialog::reject();
}
Qt中,对话框(如`QDialog`)通常使用信号(signal)和槽(slot)机制来响应用户的交互事件,包括点击 "OK" 和关闭按钮。下面是简单的实现步骤: 1. **添加信号**: - 对于 "OK" 事件,你需要自定义一个信号。比如,如果你的对话框有一个名为`buttonClicked`的成员函数,可以在`QPushButton`上连接一个点击信号: ```cpp QPushButton *okButton = new QPushButton("OK"); connect(okButton, &QPushButton::clicked, this, &YourClass::buttonClicked); ``` - 自定义的槽函数`buttonClicked`里可以处理 "OK" 事件的逻辑。 2. **槽函数实现**: ```cpp void YourClass::buttonClicked() { if (/*处理条件*/) { emit accepted(); // 发送对话框已接受的信号 } else { reject(); // 如果不需要默认的OK行为,可以用reject代替,关闭对话框并返回一个错误结果 } } virtual int exec() override { // 重写父类的exec方法 if (buttonClicked()) { return QDialog::Accepted; // 用户点击OK,返回Accepted } else { return QDialog::Rejected; // 取消或关闭对话框,返回Rejected } } ``` 3. **关闭事件**: 当用户直接关闭窗口或者按Esc键等关闭对话框,会触发`rejected()`信号。你可以像处理`accepted`一样,在槽函数中编写相应的代码: ```cpp void YourClass::rejected() { /* 关闭对话框的清理工作 */ } // 也可以在这里覆盖父类的closeEvent函数,以便在窗口被关闭执行额外操作 virtual void closeEvent(QCloseEvent*) override { rejected(); } ``` 记住,`exec()`方法是对话框生命周期的关键部分,只有当其返回`Accepted`或`Rejected`对话框才会退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值