2017-02-18 56 views
3

我爲我的應用使用CAMA系列(指紋模塊)。在該文件中,它表示建議在退出應用程序之前使用EnrollStandByMode命令。我創建這個命令並在我的應用程序的QMainWindow的析構函數中調用它。 (這裏沒有問題)。但是,當我退出應用程序並再次運行它時,我的指紋很混亂,響應命令也不正確。跟蹤我的代碼後,我看到應用程序關閉時按鈕關閉時析構函數不能運行。當我想退出應用程序時,如何在qt中自動調用析構函數?

這是我退出qapp的代碼。

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

我想知道如何在退出應用程序之前調用析構函數嗎?

+0

不確定這會起作用,所以不是答案,但是如果一個類的唯一目的是在析構函數中調用EnrollStandByMode,然後得到該類的全局變量,那該怎麼辦? C++運行時庫應該調用所有全局變量的析構函數(但要注意其他一些全局變量可能已經被破壞了,所以要小心)。 –

+0

你的意思是,首先我創建一個只調用這個方法的類,然後我調用一個全局變量來調用它?那麼它對我有什麼幫助?你能解釋一下嗎?提前tnx –

+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; 
} 

另一種選擇,到底是用qAddPostRoutine()這是由Qt應用程序對象的調用註冊功能析構函數。

如果您需要Qt事件循環,請將函數連接到Qt應用程序對象的aboutToQuit()信號。

相關問題