8

How do I use qDebug in a Qt console application to output to the Qt Creator "application output" window? Currently qDebug writes to the console window which interferes with the non-debug output.

Using qDebug in a Qt GUI app outputs to application output window by default.

Application output

Eugene
  • 10,957
  • 20
  • 69
  • 97

2 Answers2

7

You can either output everything to console or everything to Qt Creator's Application Output panel.

For sake of completeness: If you want to have all the output in the panel instead of console you can uncheck "Run in terminal" in Project->Run settings.

Bojan
  • 736
  • 8
  • 18
2

To redirect QDebug to multiple places, you might have to write some code, maybe like this:

QList<QtMsgHandler> messageHandlers_;

static void messageDispatcher(QtMsgType type, const char *msg)
{
  foreach (QtMsgHandler callback, ::messageHandlers_)
    callback(type, msg);
}

static void messageLogger(QtMsgType type, const char *msg)
{
  QString output;
  switch (type) {
  case QtDebugMsg:    output = QString("mesage: %1\n").arg(msg); break;
  case QtWarningMsg:  output = QString("warning: %1\n").arg(msg); break;
  case QtCriticalMsg: output = QString("critical: %1\n").arg(msg); break;
  case QtFatalMsg:    output = QString("fatal: %1\n").arg(msg); break;
  default: return;
  }

  QFile file("log.txt");
  if (file.open(QIODevice::WriteOnly | QIODevice::Append))
    QTextStream(&file) << output;
}

int main()
{
  ...
  ::messageHandlers_.append(messageLogger)
  qInstallMsgHandler(messageDispatcher);
  ...
}
BaCaRoZzo
  • 7,502
  • 6
  • 51
  • 82
jichi
  • 6,333
  • 1
  • 31
  • 25
  • This code doesn't work. Not sure if it's because of typos in the code sample (of which there seem to be at least one) or because Qt has progressed since 2013 and the answer uses deprecated calls. – Kenn Sebesta Apr 08 '17 at 10:17