日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

拦截QT关闭窗口的CloseEvent

發(fā)布時(shí)間:2025/5/22 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拦截QT关闭窗口的CloseEvent 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫程序遇到了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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。