首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt:如何处理用户按下“X”(关闭)按钮的事件?

Qt:如何处理用户按下“X”(关闭)按钮的事件?
EN

Stack Overflow用户
提问于 2013-07-05 12:16:15
回答 4查看 131.3K关注 0票数 141

我正在使用Qt开发一个应用程序。我不知道哪个槽对应于“用户点击窗口框架的‘X’(关闭)按钮”的事件,即这个按钮:

如果没有这样的插槽,有没有人能给我一些建议,让我在用户按下关闭按钮后启动一个功能。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-05 14:53:06

如果你有一个QMainWindow,你可以重写closeEvent方法。

代码语言:javascript
运行
复制
#include <QCloseEvent>
void MainWindow::closeEvent (QCloseEvent *event)
{
    QMessageBox::StandardButton resBtn = QMessageBox::question( this, APP_NAME,
                                                                tr("Are you sure?\n"),
                                                                QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
                                                                QMessageBox::Yes);
    if (resBtn != QMessageBox::Yes) {
        event->ignore();
    } else {
        event->accept();
    }
}

如果要创建QDialog的子类,则不会调用closeEvent,因此必须重写reject()

代码语言:javascript
运行
复制
void MyDialog::reject()
{
    QMessageBox::StandardButton resBtn = QMessageBox::Yes;
    if (changes) {
        resBtn = QMessageBox::question( this, APP_NAME,
                                        tr("Are you sure?\n"),
                                        QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
                                        QMessageBox::Yes);
    }
    if (resBtn == QMessageBox::Yes) {
        QDialog::reject();
    }
}
票数 188
EN

Stack Overflow用户

发布于 2013-07-05 12:46:40

好吧,我知道了。一种方法是覆盖类定义中的QWidget::closeEvent(QCloseEvent *event)方法,并将代码添加到该函数中。示例:

代码语言:javascript
运行
复制
class foo : public QMainWindow
{
    Q_OBJECT
private:
    void closeEvent(QCloseEvent *bar);
    // ...
};


void foo::closeEvent(QCloseEvent *bar)
{
    // Do something
    bar->accept();
}
票数 18
EN

Stack Overflow用户

发布于 2013-07-05 18:44:06

您可以将插槽附加到

代码语言:javascript
运行
复制
void aboutToQuit();

你的QApplication信号。此信号应在应用程序关闭之前发出。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17480984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档