4

Qt アプリケーションが閉じる直前にデータベースを更新したいと考えています。

1connect(this, SIGNAL(quit()), this, SLOT(updateDatabase())) つの方法は終了ボタンを導入することですが、ユーザーが押した場合にこの機能を実現することは可能Alt+F4ですか?

4

2 に答える 2

6

aboutToQuit()代わりにシグナルを使用してください。

このシグナルは、アプリケーションがメイン イベント ループを終了しようとしているときに発行されます。たとえば、イベント ループ レベルがゼロになったときなどです。これは、アプリケーション内から quit() を呼び出した後、またはユーザーがデスクトップ セッション全体をシャットダウンしたときに発生する可能性があります。

このシグナルは、アプリケーションが直前にクリーンアップを行う必要がある場合に特に役立ちます。この状態ではユーザーとの対話はできないことに注意してください。

例えば ​​:

connect(this, SIGNAL(aboutToQuit()), this, SLOT(updateDatabase()));
于 2013-03-31T16:32:53.580 に答える
2

aboutToQuit()シグナルを送るのではなく、 を再実装する別の方法がありcloseEvent(QCloseEvent *event)ます。ステートメントの前にスロットを呼び出すことができますevent->accept();

このような:

void MainWindow::closeEvent(QCloseEvent *event)
{
    call_your_slot_here();
    // accept close event
    event->accept();
}
于 2013-04-01T01:35:28.150 に答える