拦截QT关闭窗口的CloseEvent
寫程序遇到了QTimer啟動(dòng)以后可以在普通函數(shù)(例如槽函數(shù))里面停止,但是無法在析構(gòu)函數(shù)里停止的問題。想方設(shè)法皆無果,最后之得從關(guān)閉窗口上下功夫,關(guān)閉窗口時(shí)判斷如果timer還是啟動(dòng)狀態(tài)(即后臺(tái)進(jìn)程還在跑),就彈出提示要求用戶先關(guān)閉進(jìn)程。然后找了一篇講“相應(yīng)QT關(guān)閉窗口事件”的例子,摘抄如下。
轉(zhuǎn)自:http://blog.csdn.net/vah101/article/details/6133728
QDialog類下有一個(gè)虛函數(shù)
void QDialog::closeEvent (??QCloseEvent???*??e???)??[virtual protected]
通過實(shí)現(xiàn)closeEvent函數(shù),就可以以對(duì)關(guān)閉窗口消息進(jìn)行攔截,比如程序還沒有完成工作時(shí),可以彈出警告窗口,即使用戶確認(rèn)退出操作
?在頭文件中,需要加入#include <QCloseEvent>:
#ifndef TEST_H
#define TEST_H
#include <QDialog>
#include <QCloseEvent>
class ClientTest : public QDialog
{
??? Q_OBJECT
public:
??? ClientTest();
??? void closeEvent(QCloseEvent *event);
?//后邊的具體實(shí)現(xiàn)省略
...
};
#endif
在cpp文件中,對(duì)closeEvent函數(shù)進(jìn)行實(shí)現(xiàn):
void ClientTest::closeEvent(QCloseEvent *event)
{
??? QMessageBox::StandardButton button;
??? button = QMessageBox::question(this, tr("退出程序"),
??????? QString(tr("警告:程序有一個(gè)任務(wù)正在運(yùn)行中,是否結(jié)束操作退出?")),
??????? QMessageBox::Yes | QMessageBox::No);
? ? if (button == QMessageBox::No) {
??????? event->ignore();? //忽略退出信號(hào),程序繼續(xù)運(yùn)行
??? }
??? else if (button == QMessageBox::Yes) {
??????? event->accept();? //接受退出信號(hào),程序退出
??? }
}
總結(jié)
以上是生活随笔為你收集整理的拦截QT关闭窗口的CloseEvent的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 唐人街探案3票房破39亿 陈思诚首个票
- 下一篇: ActiveX控件制作与发布,如何将您的