C++Qt点击三个button分别响应OK、Apply、Cancel事件
时间: 2023-08-04 19:05:56 浏览: 154
在C++Qt中,可以通过继承QDialog类并重写它的accept()、reject()和customEvent(QEvent*)函数来实现点击三个button分别响应OK、Apply、Cancel事件的功能。
具体实现步骤如下:
1. 定义一个自定义对话框类,并在其头文件中声明三个按钮:OK、Apply、Cancel。
```cpp
class MyDialog : public QDialog
{
Q_OBJECT
public:
explicit MyDialog(QWidget *parent = nullptr);
private:
QPushButton *m_btnOk;
QPushButton *m_btnApply;
QPushButton *m_btnCancel;
private slots:
void onBtnOkClicked();
void onBtnApplyClicked();
void onBtnCancelClicked();
protected:
void accept() override;
void reject() override;
void customEvent(QEvent *event) override;
};
```
2. 在构造函数中创建三个按钮,并连接它们的clicked()信号到对应的槽函数。
```cpp
MyDialog::MyDialog(QWidget *parent)
: QDialog(parent)
{
m_btnOk = new QPushButton(tr("OK"), this);
m_btnApply = new QPushButton(tr("Apply"), this);
m_btnCancel = new QPushButton(tr("Cancel"), this);
connect(m_btnOk, &QPushButton::clicked, this, &MyDialog::onBtnOkClicked);
connect(m_btnApply, &QPushButton::clicked, this, &MyDialog::onBtnApplyClicked);
connect(m_btnCancel, &QPushButton::clicked, this, &MyDialog::onBtnCancelClicked);
// layout initialization and widget placement
}
```
3. 重写accept()和reject()函数,分别在用户点击OK和Cancel按钮时关闭对话框并返回对应的结果。
```cpp
void MyDialog::accept()
{
QDialog::accept();
}
void MyDialog::reject()
{
QDialog::reject();
}
```
4. 重写customEvent(QEvent*)函数,捕捉QEvent::User事件,并在用户点击Apply按钮时触发。
```cpp
void MyDialog::customEvent(QEvent *event)
{
if (event->type() == QEvent::User) {
// User event is sent from onBtnApplyClicked() function
// when the user clicks the Apply button.
// Do the required actions here.
} else {
QDialog::customEvent(event);
}
}
```
5. 在onBtnOkClicked()、onBtnApplyClicked()和onBtnCancelClicked()槽函数中分别调用accept()、发送QEvent::User事件和reject()函数。
```cpp
void MyDialog::onBtnOkClicked()
{
accept();
}
void MyDialog::onBtnApplyClicked()
{
QCoreApplication::postEvent(this, new QEvent(QEvent::User));
}
void MyDialog::onBtnCancelClicked()
{
reject();
}
```
这样,当用户点击OK按钮时,对话框将关闭并返回QDialog::Accepted的结果;当用户点击Apply按钮时,会发送QEvent::User事件;当用户点击Cancel按钮时,对话框将关闭并返回QDialog::Rejected的结果。
阅读全文