用户手动关闭系统时的事件处理程序

发布于 2024-08-16 03:06:26 字数 166 浏览 8 评论 0原文

当关闭消息发送到系统时,我需要一个事件处理程序。 有人可以帮忙吗?

当我们尝试关闭系统时,如果有任何对话框打开,关闭进程就会终止。我不希望这种情况发生在我的应用程序中。即,如果从我的应用程序打开任何对话框并且我尝试关闭我的系统,那么它不应该阻止关闭过程。这个实现可能吗?

谢谢, 拉胡尔

I need a event handler when ever shutdown message is send to system.
Can anyone help?

When ever we try to shutdown a system, and if any dialog box is open shutdown process terminates. I don't want this to happen in my application. i.e if any dialog box is open from my application and I try to shutdown my system then it should not block shutdown process. Is this implementation possible?

Thanks,
Rahul

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三岁铭 2024-08-23 03:06:26

尝试覆盖 QApplication::commitData 当用户关闭系统时应该调用它并且您的应用程序仍在运行。

该函数处理会话
管理。当
QSessionManager想要应用程序
提交所有数据。

通常这意味着保存所有打开的
文件,在获得许可后
用户。此外,您可能想要
提供一种方法,用户可以通过该方法
取消关闭。

下面是一个示例(从未在 Mac 上尝试过;尽管在我的 ubuntu 上运行良好):

main.cpp:

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QSessionManager>

class MyApplication : public QApplication
{
public:
    MyApplication(int &argc, char **argv);
    virtual void commitData(QSessionManager& sm);
};

MyApplication::MyApplication(int &argc, char **argv):
        QApplication(argc, argv)
{
    //???
}

void MyApplication::commitData(QSessionManager& sm)
{
    // do smth here....    
    QApplication::commitData(sm);
}

int main(int argc, char *argv[])
{
    MyApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

希望这会有所帮助,问候

try overriding QApplication::commitData it should be called whenever user shuts down the system and your application is still running.

This function deals with session
management. It is invoked when the
QSessionManager wants the application
to commit all its data.

Usually this means saving all open
files, after getting permission from
the user. Furthermore you may want to
provide a means by which the user can
cancel the shutdown.

below is an example (never tried it with macs; though works fine on my ubuntu):

main.cpp:

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QSessionManager>

class MyApplication : public QApplication
{
public:
    MyApplication(int &argc, char **argv);
    virtual void commitData(QSessionManager& sm);
};

MyApplication::MyApplication(int &argc, char **argv):
        QApplication(argc, argv)
{
    //???
}

void MyApplication::commitData(QSessionManager& sm)
{
    // do smth here....    
    QApplication::commitData(sm);
}

int main(int argc, char *argv[])
{
    MyApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

hope this helps, regards

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文