首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QApplication::saveState和QApplication::commitData on Windows

QApplication::saveState和QApplication::commitData on Windows
EN

Stack Overflow用户
提问于 2011-11-29 15:35:14
回答 2查看 1.3K关注 0票数 2

什么时候在Windows上调用虚拟函数QApplication::saveStateQApplication::commitData?它们是被调用的,还是会话管理仅仅是UNIX的事情?当用户登录时,如果应用程序正在运行,它们会被调用(并且应用程序被强制关闭)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-29 23:33:04

从文件中:

让会话管理与Qt一起工作 从重新实现QApplication::commitData()开始,使应用程序能够参与优雅的注销过程。如果您只针对Microsoft平台,这就是您可以并必须提供的全部内容。(强调后加)

commitData()被调用当windows应用程序接收到奎尔扬 windows消息时。

来自WM_QUERYENDSESSION文档:

当用户选择结束会话或应用程序调用系统关闭函数之一时,就会发送WM_QUERYENDSESSION消息。如果任何应用程序返回零,则会话不会结束。一旦一个应用程序返回零,系统就停止发送WM_QUERYENDSESSION消息。 在处理此消息之后,系统将WM_ENDSESSION消息与wParam参数设置为WM_QUERYENDSESSION消息的结果。

http://doc.qt.nokia.com/latest/qapplication.html#commitData

票数 2
EN

Stack Overflow用户

发布于 2011-11-30 11:20:28

我编写了一个简单的测试应用程序,如下所示。我用QT4.7和MSVS 2010编译了这个应用程序,并在Windows上运行。然后我做了三个不同的测试:

  1. 启动应用程序。使用主窗口中的“关闭”按钮终止应用程序。
  2. 启动应用程序。使用任务管理器中的End Task终止应用程序。
  3. 启动应用程序。在应用程序运行的情况下退出。

测试结果:

  • QApplication::commitData仅在第3种情况下被调用
  • QApplication::saveState在这三种情况中都没有被调用。

下面是测试应用程序的代码。commitData和saveState函数没有做任何有用的事情;应用程序的唯一目的是检查它们是否被调用。

代码语言:javascript
运行
复制
#include <QtCore/QtCore>
#include <QtGui/QtGui>
#include <fstream>

class MyApplication : public QApplication {
public:
    MyApplication(int& argc, char** argv) : QApplication(argc, argv) {}

    virtual void saveState(QSessionManager& manager)
    {
        std::ofstream ofs("SaveState.txt");
        ofs << "Test";
    }

    virtual void commitData(QSessionManager& manager)
    {
        std::ofstream ofs("CommitData.txt");
        ofs << "Test";
    }
};

int main(int argc, char** argv)
{
    {
        std::ofstream ofs("Begin.txt");
        ofs << "Test";
    }

    MyApplication app(argc, argv);
    QMainWindow mw;
    mw.show();
    app.exec();

    {
         std::ofstream ofs("End.txt");
         ofs << "Test";
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8313471

复制
相关文章

相似问题

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