Я написал простое тестовое приложение;увидеть ниже.Я скомпилировал приложение с Qt 4.7 и MSVS 2010 и запустил его на Windows XP.Затем я провел три разных теста:
- Запустите приложение.Завершите работу приложения, используя кнопку закрытия в главном окне.
- Запустите приложение.Завершите работу приложения, используя Завершить задачу в диспетчере задач.
- Запустите приложение.Выйдите из системы с запущенным приложением.
Результат тестов:
- QApplication :: commitData вызывается только в случае 3
- QApplication :: saveStateне вызывается ни в одном из трех случаев.
Вот код для тестового приложения.Функции commitData и saveState ничего не делают полезного;единственная цель приложения - проверить, вызваны они или нет.
#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";
}
}