2017-02-18 5 views
3

私のアプリケーションにはCAMAシリーズ(フィンガープリントモジュール)を使用しています。このドキュメントでは、アプリケーションを終了する前にEnrollStandByModeコマンドを使用することを推奨しています。私はこのコマンドを作成し、私のアプリケーションのQMainWindow上の私のデストラクタで呼び出す。 (ここに問題はない)。しかし、アプリケーションを終了して再度実行すると、指紋が混乱し、応答コマンドが正しく表示されません。私のコードをトレースした後、アプリケーションがクローズボタンで閉じると、デストラクタは実行されませんでした。アプリケーションを終了したいときにqt内のデストラクタを自動的に呼び出す方法は?

qappを終了するコードです。

void MainWindow::on_pushButton_clicked() 
{ 
    qDebug()«"QApplication::quit()"; 
    QApplication::quit(); 
} 

アプリケーションを終了する前にデストラクタを呼び出す方法を知りたいですか?

+0

これはうまくいきませんので、答えはありませんが、デストラクタでEnrollStandByModeを呼び出してそのクラスのグローバル変数を持つことを唯一の目的とするクラスはどうですか? C++ランタイムライブラリは、すべてのグローバル変数のデストラクタを呼び出す必要があります(ただし、他のグローバルが既に破壊されている可能性があるので注意してください)。 –

+0

あなたはまず、このメソッドを呼び出すだけのクラスを作成してから、それを呼び出すためのグローバル変数を作成するのですか?どうすればそれができますか?あなたはそれを説明できますか?tnx in advance –

+0

@ H.Ghassami私は、あなたが明示的に 'QApplication :: quit();'と呼ぶことを見てきました。 'on_pushButton_clicked'の中でウィンドウを閉じるだけではどうでしょうか?どちらの場合も申請は終了します。 – skypjack

答えて

7

アプリケーションの最後に何かを呼び出す方法はいくつかあります。

Qtのイベントループを必要としない、あなたのコードが実行される場合は、ちょうどmain()

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); // or QGuiApplication/QCoreApplication 

    // application setup 

    const int resultCode = app.exec(); 

    // call your shutdown code here 

    return resultCode; 
} 

別のオプションの最後に関数を呼び出すには、Qtのアプリケーションオブジェクトのことで呼び出されたqAddPostRoutine()で機能を登録することですデストラクタ。

Qtイベントループが必要な場合は、関数をQtアプリケーションオブジェクトのaboutToQuit()シグナルに接続します。

関連する問題