QT application app.exec () в коде main () не достигается, пока не закроется главное окно - PullRequest
0 голосов
/ 06 марта 2012

Я создал приложение QT, используя QT Creator 2.4.0. и создал файл main.cpp, который включает функцию main (), как показано ниже:

  int main(int argc, char *argv[])
  {
    QApplication app(argc, argv);
    Q_INIT_RESOURCE(MainResources);
    MainWindow mainWindow;
    mainWindow.show();
    cout << "1\n";
    int retVal = app.exec();
    cout << "2\n";
    return retVal;
  }

Когда я выполняю эту функцию, койки "1" и "2" вообще не отображаются. Я ожидал увидеть по крайней мере «1» в выводе консоли. они печатаются только после того, как я закрою главное окно. таким образом, создается впечатление, что app.exec () не выполняется до тех пор, пока не закроется главное окно ...

1 - кто-нибудь может это объяснить?

Когда я пытаюсь запустить это приложение из командной строки (приложение построено статически) вызов возвращается сразу после запуска файла application.exe и не ожидает закрытия главного окна.

2 - есть ли способ заставить приложение ожидать закрытия главного окна?

Спасибо

Ответы [ 3 ]

1 голос
/ 06 марта 2012

app.exec() является функцией блокировки (она запускает цикл событий Qt) и не возвращается, пока не закроется последнее окно приложения.

Вы действительно, вероятно, не видите "1" из-запроблемы с буферизацией.используйте qDebug() << "1" вместо.

0 голосов
/ 06 марта 2012

Вы указываете, что программа работает нормально в первом случае (из QtCreator?), Но без ожидаемого вывода на консоль, а во втором случае, если она запускается непосредственно из консоли, программа завершается без отображения окна?Я бы сказал, что вы используете два разных исполняемых файла.

0 голосов
/ 06 марта 2012

Весьма вероятно, что стандартный вывод буферизован, и, таким образом, «1» может быть напечатано, но не сброшено.Вы должны очистить стандартный вывод, чтобы он появился в нужное время.Или вместо этого вы можете печатать в cerr, что, скорее всего, небуферизовано.

...