LINUX.ORG.RU

Qt: Console


0

0
#include <QtCore/QCoreApplication>

#include "MyConsole.h"

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

	MyConsole mCons;
	return app.exec();
}

Как из объекта mCons убить приложение (app, наверное ?) ?.


Ответ на: комментарий от drZlo

quit-флаг сбрасывается при старте app.exec(), следовательно вызов QCoreApplication::quit() до старта главного цикла эффекта не имеет. Можно вызвать что-то типа MyConsole::init() после старта app.exec() или вместо QCoreApplication::quit() делать QTimer::singleShot(QCoreApplication::instance(), SLOT(quit())).

Dendy ★★★★★
()

>Как из объекта ... убить приложение
Как из домохозяйки сварить борщ

markevichus ★★★
()
Ответ на: комментарий от drZlo

>>Warum ? Пользовать Qt не для гуя хак ? Нужны потоки и сеть ...

Я говорю о том, КАК ты это используешь. Ты пытаешься вне контекста основного приложения создать объект и потом хочешь их него же прибить само приложение. Все равно что стрелять самому себе два раза в голову. Лучше перепроектируй приложение, чем вешай такие костыли.

MuZHiK-2 ★★★★
()
Ответ на: комментарий от MuZHiK-2

Ты пытаешься вне контекста основного приложения создать объект

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

MyConsole mCons; 
return app.exec(); 
} 

Это где ?

и потом хочешь их него же прибить само приложение

Так, а что не так ? Запустил консольное приложение. Как-то ж выйти из него надо ?

drZlo
() автор топика
Ответ на: комментарий от drZlo

>>Это где ?

Везде.

Так, а что не так ? Запустил консольное приложение. Как-то ж выйти из него надо ?

Наверно твой класс самопальный не должен блокировать работу, не? Потому как дойдя до ретурна все само нормально завершится. Ты же спроектировал работу приложения в своем классе, то есть, через всем известное место. Делай все нормально, хоть EventLoop'ы создавай, там сигналы используй.

MuZHiK-2 ★★★★
()

А что делает конструктор MyConsole? Приложение, в принципе, само завершится, если заменить return app.exec() на return 0.

systemZ
()
Ответ на: комментарий от drZlo

Всё у вас нормально с архитектурой, если нужно пользоваться событийным механизмом. Если нет, то возможно достаточно будет что-то вроде:

int main(int argc, char *argv[])  
{  
  QCoreApplication app(argc, argv);  
  MyConsole mCons;
  return mCons.exec();
}  

Если пользоваться событийным механизмом нужно, то MyConsole::exec() будет завершаться строчкой

return QCoreApplication::exec()
если нет - то просто вернёте код возврата без создания главного цикла.

Dendy ★★★★★
()
Ответ на: комментарий от drZlo

> Запустил консольное приложение. Как-то ж выйти из него надо ?

Выдерни вилку из розетки.

LamerOk ★★★★★
()
Ответ на: комментарий от drZlo

Как-то ж выйти из него надо ?

тебе цже сказали - QCoreApplication::exit(). вызываться оно должно после app.exec();

если надо раньше, сделай че нить типа

MyConsole mCons;  

if (mCons.isSomethingFlag())
{
    return app.exec();  
}
return 0;


antony986
()
Ответ на: комментарий от antony986

Еще раз:

QCoreApplication::exit() работает только из main. Мне ж надо из своего объекта (MyConsole) убить. Если это неправильная архитектура - подскажите как ?

drZlo
() автор топика
Ответ на: комментарий от drZlo

QCoreApplication::exit() работает только из main

Всё приложение работает в main(), за его пределами жизни нет. QCoreApplication::exit() работает только после старта главного цикла.

Мне ж надо из своего объекта (MyConsole) убить.

Предложение несогласовано.

Если это неправильная архитектура - подскажите как ?

Подсказал на два поста выше.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

> Подсказал на два поста выше.

Кусок кода можно ? Мне ж нужно немного: Из консоли прально завершить приложение. Всем спасибо, конечно, но вопрос остался «Как прально выйти из консольного приложения на Qt»?

drZlo
() автор топика
Ответ на: комментарий от drZlo

Зависит от того, пользуетесь ли вы событиями Qt или нет. Если нет, то зачем вам вообще вызывать app.exec(), можете ответить на этот вопрос? Если да, то так:

int MyConsole::exec()
{
  ...
  if ( !argumentsAreCorrect() )
    return 1;
  ...
  launchSomethingInBackgroundToWaitForEvent();
  return app.exec();
}


void MyConsole::receiveSomeEvent()
{
  if ( shouldQuitApp() )
    QCoreApplication::quit();
}
Dendy ★★★★★
()

Интереса ради, а чем был бы плох такой вариант?

MyConsole mCons;
if (mCons.exec()) {
return app.exec();
} else {
return mCons.code;
}

Ну или что-то типа того.

irq
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.