2017-02-18 15 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, подключите функцию к сигналу aboutToQuit() объекта приложения Qt.