chore: hook into QT logs with qInstallMessageHandler

Fixes #8296

This makes the QML logs finally show on Windows
This commit is contained in:
Jonathan Rainville 2022-11-17 11:56:31 -05:00 committed by Michał
parent 39cce22001
commit 23c13fd738
1 changed files with 34 additions and 0 deletions

View File

@ -21,6 +21,7 @@
#include <iostream>
#include <QtGlobal>
#include <QtCore/QDir>
#include <QtCore/QDebug>
#include <QtCore/QModelIndex>
@ -53,6 +54,8 @@
#ifdef QT_QUICKCONTROLS2_LIB
#include <QtQuickControls2/QQuickStyle>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "DOtherSide/DOtherSideTypesCpp.h"
#include "DOtherSide/DosQMetaObject.h"
@ -174,6 +177,35 @@ void dos_qguiapplication_initialize_opengl()
QGuiApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
}
// This catches the QT and QML logs and outputs them.
// This is necessary on Windows, because otherwise we do not get any logs at all
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
const char *file = context.file ? context.file : "";
const char *function = context.function ? context.function : "";
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtInfoMsg:
fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
default:
fprintf(stderr, "Default: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
}
}
void dos_qguiapplication_create()
{
// The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program,
@ -194,6 +226,8 @@ void dos_qguiapplication_create()
static char *argv[] = {toCharPtr(QStringLiteral("Status"))};
#endif
qInstallMessageHandler(myMessageOutput);
new QGuiApplication(argc, argv);
register_meta_types();
}