У меня есть 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();
}
Однако консольные сообщения не появляются, когда я запускаю приложение от командной строки. Кто-либо знает, как я могу заставить это работать?
Windows на самом деле не поддерживает двухрежимные приложения.
Чтобы увидеть консольный вывод, вам нужно создать консольное приложение
CONFIG += console
Однако, если вы дважды щелкните на программе, чтобы запустить версию с графическим интерфейсом, появится консольное окно, что, вероятно, не то, чего вы хотите. Чтобы предотвратить появление консольного окна, необходимо создать приложение в режиме GUI, и тогда вы не получите никакого вывода в консоль.
Одной из идей может быть создание второго небольшого приложения, которое является консольным приложением и обеспечивает вывод данных. Оно может вызывать второе приложение для выполнения работы.
Или вы можете поместить всю функциональность в DLL, а затем создать две версии .exe-файла, которые имеют очень простые основные функции, вызывающие DLL. Одна из них предназначена для графического интерфейса, а другая - для консоли.
Прежде всего, вы можете попробовать очистить буфер
std::cout << "Hello, world!"<<std::endl;
Для более подробного протоколирования на основе Qt вы можете попробовать использовать qDebug.
Прежде всего, зачем вам выводить на консоль в сборке в режиме выпуска? Никто не подумает заглядывать туда, когда есть графический интерфейс ...
Во-вторых, qDebug наворочен :)
В-третьих, вы можете попробовать добавить console
в свой .pro
' s КОНФИГУРАЦИЯ
, это может сработать.
Я использовал этот заголовок ниже для своих проектов. Надеюсь, это поможет.
#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
к выводу, если хотите в будущем.