900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 拦截QT关闭窗口的CloseEvent

拦截QT关闭窗口的CloseEvent

时间:2021-03-14 13:04:47

相关推荐

拦截QT关闭窗口的CloseEvent

写程序遇到了QTimer启动以后可以在普通函数(例如槽函数)里面停止,但是无法在析构函数里停止的问题。想方设法皆无果,最后之得从关闭窗口上下功夫,关闭窗口时判断如果timer还是启动状态(即后台进程还在跑),就弹出提示要求用户先关闭进程。然后找了一篇讲“相应QT关闭窗口事件”的例子,摘抄如下。

转自:/vah101/article/details/6133728

QDialog类下有一个虚函数

void QDialog::closeEvent (QCloseEvent*e)[virtual protected]

通过实现closeEvent函数,就可以以对关闭窗口消息进行拦截,比如程序还没有完成工作时,可以弹出警告窗口,即使用户确认退出操作

在头文件中,需要加入#include <QCloseEvent>:

#ifndef TEST_H

#define TEST_H

#include <QDialog>

#include <QCloseEvent>

class ClientTest : public QDialog

{

Q_OBJECT

public:

ClientTest();

void closeEvent(QCloseEvent *event);

//后边的具体实现省略

...

};

#endif

在cpp文件中,对closeEvent函数进行实现:

void ClientTest::closeEvent(QCloseEvent *event)

{

QMessageBox::StandardButton button;

button = QMessageBox::question(this, tr("退出程序"),

QString(tr("警告:程序有一个任务正在运行中,是否结束操作退出?")),

QMessageBox::Yes | QMessageBox::No);

if (button == QMessageBox::No) {

event->ignore(); //忽略退出信号,程序继续运行

}

else if (button == QMessageBox::Yes) {

event->accept(); //接受退出信号,程序退出

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。