Russian Qt Forum

Qt => Вопросы новичков => Тема начата: YvenTitan от Октябрь 26, 2016, 12:41



Название: Действие по выходу из консольного приложения
Отправлено: YvenTitan от Октябрь 26, 2016, 12:41
Здравствуйте
У меня есть консольное приложение QCoreApplication, которое я запускаю под QNX (возможно это не имеет значения). Мне необходимо выполнить некоторые действия перед выходом из приложения (сейчас я выхожу из него по нажатию CTRL + C). Можете подсказать как это сделать?
По сигналу aboutToQuit() у меня не получилось. Возможно, проще сделать выход по нажатию другой кнопки...


Название: Re: Действие по выходу из консольного приложения
Отправлено: __Heaven__ от Октябрь 26, 2016, 12:49
std::atexit (http://ru.cppreference.com/w/cpp/utility/program/atexit) не пробовали?


Название: Re: Действие по выходу из консольного приложения
Отправлено: YvenTitan от Октябрь 26, 2016, 13:39
C QCoreApplication не получается, но может делаю не так.
#include<QCoreApplication>
#include<QDebug>
#include<cstdlib>
#include<cstdio>

void print(){
qDebug()<<"eee";
}

int main(int argc, char *argv[]){
QCoreApplication a(argc,argv);
atexit(print);
return a.exit();
}


Название: Re: Действие по выходу из консольного приложения
Отправлено: Bepec от Октябрь 26, 2016, 13:46
Видимо не так...
Потому что цикл событий запускать надо, а это exec().

Сделайте так.
Код:
int code = a.exec();
SomeFunction();
return code;


Название: Re: Действие по выходу из консольного приложения
Отправлено: YvenTitan от Октябрь 26, 2016, 13:52
Сейчас пробую в Windows
int code = a.exec();
atexit(print);
return code;

Не вылетает, но и в консоль ничего не выводит по закрытию окна


Название: Re: Действие по выходу из консольного приложения
Отправлено: Bepec от Октябрь 26, 2016, 13:55
Без кода можно сказать только "А хз".


Название: Re: Действие по выходу из консольного приложения
Отправлено: YvenTitan от Октябрь 26, 2016, 14:08
#include <QCoreApplication>
#include<QDebug>
#include<cstdlib>
#include<cstdio>

void print(){
    qDebug()<<"ttt";
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int code = a.exec();
    atexit(print);
    return code;
}


Название: Re: Действие по выходу из консольного приложения
Отправлено: Old от Октябрь 26, 2016, 14:20
Ctrl+C послает процессу сигнал (не путать с Qt-сигналами), который по умолчанию немедленно завершает процесс.
Вам нужно либо обрабатывать этот сигнал самому, выполнять необходимые действия и завершаться.


Название: Re: Действие по выходу из консольного приложения
Отправлено: __Heaven__ от Октябрь 26, 2016, 15:12
В дополнение к комментарию Old
std::signal поможет.


Название: Re: Действие по выходу из консольного приложения
Отправлено: ksk- от Октябрь 26, 2016, 19:13
По нажатию Ctrl+C  в консоли, процессу отправляется сигнал SIGINT.

В обработчике сигнала можно записать что-то вроде:
Код
C++ (Qt)
if (signo == SIGINT) {
   qApp->quit();
}
 

Далее можно обработать выход из приложения так:

Код
C++ (Qt)
QObject::connect(&app, &QCoreApplication::aboutToQuit, []() {
   // do something....
});