Консольный вывод в приложении Qt GUI? - PullRequest
47 голосов
/ 29 июля 2010

У меня есть приложение Qt GUI, работающее в Windows, которое позволяет передавать параметры командной строки, и в некоторых случаях я хочу вывести сообщение на консоль и затем выйти, например:

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

  if (someCommandLineParam)
  {
    std::cout << "Hello, world!";
    return 0;
  }

  MainWindow w;
  w.show();

  return a.exec();
}

Однако сообщения консоли не отображаются, когда я запускаю приложение из командной строки.Кто-нибудь знает, как я могу заставить это работать?

Ответы [ 16 ]

0 голосов
/ 07 января 2016

Я также поиграл с этим, обнаружив, что перенаправление вывода работает, но я никогда не видел вывод в окно консоли, которое присутствует для каждого приложения Windows. Пока это мое решение, пока я не найду замену Qt для ShowWindow и GetConsoleWindow.

Запустите это из командной строки без параметров - получите окно. Запустите из командной строки с параметрами (например, cmd aaa bbb ccc) - вы получите текстовый вывод в окне командной строки - так же, как вы ожидаете от любого консольного приложения Windows.

Пожалуйста, извините за неудачный пример - он представляет около 30 минут работы.

#include "mainwindow.h"
#include <QTextStream>
#include <QCoreApplication>
#include <QApplication>
#include <QWidget>
#include <windows.h>

QT_USE_NAMESPACE

int main(int argc, char *argv[])
{
    if (argc > 1)   {
        // User has specified command-line arguments
        QCoreApplication a(argc, argv);
        QTextStream  out(stdout);
        int     i;

        ShowWindow (GetConsoleWindow(),SW_NORMAL);
        for (i=1; i<argc; i++)
             out << i << ':' << argv [i] << endl;
        out << endl << "Hello, World" << endl;
        out << "Application Directory Path:" << a.applicationDirPath() << endl;
        out << "Application File Path:" << a.applicationFilePath() << endl;
        MessageBox (0,(LPCWSTR)"Continue?",(LPCWSTR)"Silly Question",MB_YESNO);
        return 0;
    } else  {
        QApplication a(argc, argv);
        MainWindow w;

        w.setWindowTitle("Simple example");
        w.show();
        return a.exec();
    }
}
0 голосов
/ 20 августа 2015

Убедитесь, что Qt5Core.dll находится в одном каталоге с исполняемым файлом вашего приложения.

У меня была похожая проблема в Qt5 с консольным приложением: если я запускаю приложение из Qt Creator, выводится текст, если я открываю cmd.exe и запускаю там то же самое приложение, ничего не видно.Очень странно!

Я решил это, скопировав Qt5Core.dll в каталог с исполняемым файлом приложения.

Вот мое крошечное консольное приложение:

#include <QCoreApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    int x=343;
    QString str("Hello World");
    qDebug()<< str << x<<"lalalaa";

    QTextStream out(stdout);
    out << "aldfjals alsdfajs...";
}
0 голосов
/ 08 августа 2014

Возможно, это был упущение других ответов, или, возможно, это требование пользователя, чтобы действительно нуждаться в выводе консоли, но очевидный ответ для меня - создать вторичное окно, которое можно показать или скрыть (с помощью флажкаили кнопка), которая показывает все сообщения путем добавления строк текста в виджет текстового поля и использования его в качестве консоли?

Преимущества такого решения:

  • Простое решение(при условии, что все, что он отображает - это простой журнал).
  • Возможность закрепить виджет «консоль» в главном окне приложения.(Во всяком случае, в Qt).
  • Возможность создавать множество консолей (если их больше 1-го потока и т. Д.).
  • Довольно простой переход от вывода локальной консоли к отправке журнала по сети наклиент.

Надеюсь, это даст вам пищу для размышлений, хотя я еще никоим образом не могу постулировать, как вам следует это делать, я могу представить, что это может быть достигнуто любым из насс небольшим поиском / чтением!

0 голосов
/ 29 июля 2010

В вашем .pro добавить

CONFIG          += console
0 голосов
/ 29 июля 2010

Прежде всего, зачем вам выводить данные на консоль в режиме релиза? Никто не подумает заглянуть туда, когда есть графический интерфейс ...

Во-вторых, qDebug просто моден:)

В-третьих, вы можете попробовать добавить console к CONFIG *1007*, это может сработать.

0 голосов
/ 29 июля 2010

Прежде всего вы можете попробовать очистить буфер

std::cout << "Hello, world!"<<std::endl;

Для более подробной регистрации на Qt вы можете попробовать использовать qDebug.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...