Да, это возможно с message handler. Также он позволяет вам писать сообщения в файлы того, что вам нужно.
Вот модифицированный пример из дока в соответствии с вашими требованиями:
#include <QApplication>
#include <stdio.h>
#include <stdlib.h>
#include <typeinfo>
#include <QDebug>
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtInfoMsg:
fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
abort();
}
}
#define MY_DEBUG(exp) qDebug() << typeid(exp).name() << #exp << exp
int main(int argc, char **argv)
{
qInstallMessageHandler(myMessageOutput);
QApplication app(argc, argv);
QString str = "Shit happens!";
MY_DEBUG(str);
return 0;
}
Выведет:
Debug: class QString str "Shit happens!" (..\ProjectorControl\ProjectorControl\main.cpp:56, int __cdecl main(int,char **))
Я думаю, что с большим количеством макро магией или шаблонами вы можете достичь более Convient поведения.
Примечание: будьте осторожны с использованием этого макроса: на самом деле exp будет выполняться дважды.
Должен ли я просто добавить класс в проект qt и импортировать его или перебросить его в один из моих классов? – Akiva
@Akiva Извините, не понял тур. Можете ли вы подробнее рассказать об этом? – Jeka
Где я определяю 'void myMessageOutput' и' MY_DEBUG'? – Akiva