シャットダウン メッセージがシステムに送信されるたびに、イベント ハンドラが必要です。誰でも助けることができますか?
システムをシャットダウンしようとするたびに、ダイアログ ボックスが開いていると、シャットダウン プロセスが終了します。アプリケーションでこれが発生しないようにします。つまり、アプリケーションからダイアログ ボックスが開いていて、システムをシャットダウンしようとしても、シャットダウン プロセスがブロックされることはありません。この実装は可能ですか?
ありがとう、ラフル
シャットダウン メッセージがシステムに送信されるたびに、イベント ハンドラが必要です。誰でも助けることができますか?
システムをシャットダウンしようとするたびに、ダイアログ ボックスが開いていると、シャットダウン プロセスが終了します。アプリケーションでこれが発生しないようにします。つまり、アプリケーションからダイアログ ボックスが開いていて、システムをシャットダウンしようとしても、シャットダウン プロセスがブロックされることはありません。この実装は可能ですか?
ありがとう、ラフル
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();
}
これがお役に立てば幸いです
はい、NSWorkspaceWillPowerOffNotification を見てください