Вопрос по qtconsole, qdebug, qt-creator, console-application, debugging – qDebug Консольное приложение Qt для вывода на выход приложения Qt Creator

7

Как использовать qDebug в консольном приложении Qt для вывода в Qt Creator & quot; выходной файл приложения & quot; окно? В настоящее время qDebug пишет в окно консоли, что мешает выводу без отладки.

Использование qDebug в приложении Qt GUI по умолчанию выводит в окно вывода приложения.

Application output

Ваш Ответ

2   ответа
6

либо все на панель вывода приложений Qt Creator.

Для полноты картины: если вы хотите, чтобы все выходные данные были на панели, а не на консоли, вы можете снять флажок & quot; Запускать в терминале & quot; в Project-> Выполнить настройки.

К сожалению, вы не можете сделать это.
У меня есть "Запустить в терминале" не проверен и до сих пор не вижу никаких выходных данных из моего приложения. std :: cout, qDebug ничего не выводит
Я знаю это ... но я хочу выводить в два разных места ... вот почему это вывод отладки. Eugene
2

вам может потребоваться написать код, например, такой:

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);
  ...
}
Этот код не работает. Не уверен, что это из-за опечаток в образце кода (из которых, по-видимому, есть хотя бы один) или потому, что Qt прогрессирует с 2013 года, и в ответе используются устаревшие вызовы.

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