Консоль производится в QT приложение для GUI?

У меня есть 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();
}

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

47
задан Zitrax 15 July 2015 в 14:53
поделиться

5 ответов

Windows на самом деле не поддерживает двухрежимные приложения.

Чтобы увидеть консольный вывод, вам нужно создать консольное приложение

CONFIG += console

Однако, если вы дважды щелкните на программе, чтобы запустить версию с графическим интерфейсом, появится консольное окно, что, вероятно, не то, чего вы хотите. Чтобы предотвратить появление консольного окна, необходимо создать приложение в режиме GUI, и тогда вы не получите никакого вывода в консоль.

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

Или вы можете поместить всю функциональность в DLL, а затем создать две версии .exe-файла, которые имеют очень простые основные функции, вызывающие DLL. Одна из них предназначена для графического интерфейса, а другая - для консоли.

46
ответ дан 26 November 2019 в 19:47
поделиться

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

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

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

-3
ответ дан 26 November 2019 в 19:47
поделиться

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

CONFIG          += console
0
ответ дан 26 November 2019 в 19:47
поделиться

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

Во-вторых, qDebug наворочен :)

В-третьих, вы можете попробовать добавить console в свой .pro ' s КОНФИГУРАЦИЯ , это может сработать.

0
ответ дан 26 November 2019 в 19:47
поделиться

Я использовал этот заголовок ниже для своих проектов. Надеюсь, это поможет.

#ifndef __DEBUG__H
#define __DEBUG__H

#include <QtGui>    

static void myMessageOutput(bool debug, QtMsgType type, const QString & msg) {

    if (!debug) return;

    QDateTime dateTime = QDateTime::currentDateTime();
    QString dateString = dateTime.toString("yyyy.MM.dd hh:mm:ss:zzz");

    switch (type) {

        case QtDebugMsg:
            fprintf(stderr, "Debug: %s\n", msg.toAscii().data());
            break;
        case QtWarningMsg:
            fprintf(stderr, "Warning: %s\n", msg.toAscii().data());
            break;
        case QtCriticalMsg:
            fprintf(stderr, "Critical: %s\n", msg.toAscii().data());
            break;
        case QtFatalMsg:
            fprintf(stderr, "Fatal: %s\n", msg.toAscii().data());
            abort();
    }
}

#endif

PS: вы можете добавить dateString к выводу, если хотите в будущем.

2
ответ дан 26 November 2019 в 19:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: