QT QDialog 中的按钮,如何按下后触发 accepted 消息?

QT 作为跨平台的系统,对话框并没有采用 Windows API 那种模式,通过返回 mrOK、mrCancel 等结果告诉调用方结果,而是采用了 accepted、rejected 等信号确定执行结果。下面介绍几种出发这些信号的方法。

1. 在按钮的 clicked 槽函数中触发 accepted 信号

在 Qt 的 QDialog 中,要实现在按下按钮后触发 accepted 信号,你通常需要将按钮的 clicked 信号连接到一个槽函数上,然后在该槽函数中调用 accept() 方法。以下是一个简单的示例代码,展示了如何实现这一功能:

#include <QDialog>  
#include <QPushButton>  
  
class MyDialog : public QDialog {
     
    Q_OBJECT  
  
public:  
    MyDialog(QWidget *parent = nullptr) : QDialog(parent) {
     
        QPushButton *button = new QPushButton("OK", this);  
        connect(button, &QPushButton::clicked, this, &MyDialog::onButtonClicked);  
    }  
  
private slots:  
    void onButtonClicked() {
     
        accept(); // 触发 accepted 信号  
    }  
};

2. 在 finished 槽函数中触发 acepted 信号

在 Qt 中,当 QDialog 关闭时,它会发出一个 finished 信号。如果你想在对话框关闭时执行特定的操作,可以将这个信号连接到一个槽函数上。

例如,你可以像这样定义一个槽函数:

void MyClass::onDialogFinished(int result) {
     
    if (result == QDialog::Accepted) {
     
        // 对话框被接受,执行一些操作...  
    } else {
     
        // 对话框被拒绝或以其他方式关闭,执行其他操作...  
    }  
}

然后,在对话框关闭时,你可以连接 finished 信号到这个槽函数:

connect(myDialog, &QDialog::finished, this, &MyClass::onDialogFinished);

这样,无论 myDialog 是如何关闭的(通过 accept() 或 reject(),或者其他原因),onDialogFinished 函数都会被调用,并且可以根据返回的结果码执行相应的操作。

3. 在 exec() 后触发 accepted 信号

QDialog::exec() 是 Qt 框架中 QDialog 类的一个方法,用于显示对话框并进入模态循环。当对话框显示时,它会阻止用户与其他窗口交互,直到对话框被关闭。

当 exec() 被调用时,它会进入一个事件循环,等待用户与对话框进行交互(如点击按钮)。一旦用户与对话框完成交互(例如,点击了“OK”或“Cancel”按钮),exec() 方法会返回一个 int 类型的值,表示用户的操作结果。

返回值可能是以下之一:

  • Accepted:用户点击了“OK”按钮。
  • Rejected:用户点击了“Cancel”按钮或其他取消操作。

使用 exec() 的一个简单示例:

QDialog dialog;  
dialog.setWindowTitle("示例对话框");  
dialog.setText("这是一个示例对话框。");  
dialog.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);  
  
int result = dialog.exec();  
  
if (result == QDialog::Accepted) {
     
    // 用户点击了“OK”按钮  
} else if (result == QDialog::Rejected) {
     
    // 用户点击了“Cancel”按钮或其他取消操作  
}

最近更新

  1. TCP协议是安全的吗?

    2024-02-06 23:10:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-06 23:10:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-06 23:10:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-06 23:10:02       20 阅读

热门阅读

  1. 【计算机二级考试C语言】C可变参数

    2024-02-06 23:10:02       27 阅读
  2. gerrit(2) | 为什么使用 gerrit

    2024-02-06 23:10:02       35 阅读
  3. C++泛型编程:模板偏特化

    2024-02-06 23:10:02       34 阅读
  4. go语言进阶篇——接口

    2024-02-06 23:10:02       34 阅读
  5. React Emotion 如何优雅的使用样式(一)

    2024-02-06 23:10:02       30 阅读