Почему моя программа на C ++ / Qt ничего не делает? - PullRequest
2 голосов
/ 19 января 2012

Я написал эту программу в Qt Creator, но я не уверен, как ее запустить.Вот мой код:

#include <QtCore/QCoreApplication>
using namespace std;
#include <iostream>

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

   string str;
   cin >> str;
   cout << " str is : " << str;
   return a.exec();
}

Когда я запускаю его, моя консоль показывает это:

Starting /home/hamed/qt programs/test3-build-desktop/test3...

... и ничего не происходит.Что мне делать?

Ответы [ 3 ]

3 голосов
/ 19 января 2012

При копировании с вставкой вашего кода он запускается для меня, как и ожидалось (ну, он не завершается, а запускается).Вот что я сделал в командной строке:

cd testproject
qmake -project
qmake
make
./testproject

Как уже упоминалось в комментарии выше, сам Qt является библиотекой, поэтому вы, вероятно, обращаетесь к какой-то IDE, когда говорите, что запускаете ее из «в Qt» - поведениеэто зависит исключительно от того, какую IDE вы используете.

Обновление:

Из вашего сообщения

Starting /home/hamed/qt programs/test3-build-desktop/test3...

Я предполагаю, что вы используетеQtCreator IDE, которая не позволяет вам вводить данные в консоль при запуске.Я не знаю, сможете ли вы заставить это сделать это, но это работает, если вы вводите каталог вашего проекта в консоли и используете ./projectname.Упомянутая выше часть здания будет обрабатываться QtCreator.

Другое обновление:

Проверьте эту ветку для получения информации о том, как ее получитьработать напрямую из QtCreator.

2 голосов
/ 19 января 2012

Добавьте QTimer::singleShot(0, &a, SLOT(quit())); перед строкой return a.exec(); и не забудьте #include <QtCore/QTimer> (или вы можете упростить жизнь и импортировать все #include <QtCore>).

a.exec() входит в цикл обработки событий, который ожидает события; обычно в форме пользовательского ввода с графическим интерфейсом пользователя. Это, однако, программа из командной строки, и у пользователя нет способа отправить событие, чтобы он сидел и ждал вечно. Это полезно для приложений типа сервера, но не для того, что вы здесь делаете. :)

(Обратите внимание, это одна из многих причин, по которой ваше приложение может показаться, что ничего не делает. Возможно, вам придется выполнить несколько из этих ответов, прежде чем ваша программа сделает то, что вы ожидаете)

2 голосов
/ 19 января 2012

ничего не происходит !!

Ваша программа ожидает ввода, как вы написали здесь:

cin >> str;

что мне делать?

Просто введите что-нибудь и нажмите введите .

...