-
Notifications
You must be signed in to change notification settings - Fork 2
/
messagehandler.cpp
87 lines (76 loc) · 3.34 KB
/
messagehandler.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "messagehandler.h"
#include <QTextDocument>
#include <QTextCursor>
#include <QDateTime>
#include <QDebug>
MessageHandler* MessageHandler::m_instance = nullptr;
QTextEdit* MessageHandler::m_textEdit = nullptr;
MessageHandler::MessageHandler(QTextEdit *textEdit, QObject *parent)
: QObject(parent)
{
m_textEdit = textEdit;
qInstallMessageHandler(messageHandlerFunction);
}
void MessageHandler::installMessageHandler(QTextEdit *textEdit)
{
if (!m_instance)
m_instance = new MessageHandler(textEdit);
}
void MessageHandler::messageHandlerFunction(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QString logType;
QColor textColor;
QColor bracketColor;
switch (type) {
case QtDebugMsg:
logType = "Debug";
textColor = m_textEdit->palette().text().color(); // Колір для Debug
bracketColor = Qt::darkGreen; // Колір для тексту в квадратних дужках
break;
case QtInfoMsg:
logType = "Info";
textColor = m_textEdit->palette().text().color(); // Колір для Info
bracketColor = Qt::blue; // Колір для тексту в квадратних дужках
break;
case QtWarningMsg:
logType = "Warning";
textColor = m_textEdit->palette().text().color(); // Колір для Warning
bracketColor = Qt::darkRed; // Колір для тексту в квадратних дужках
break;
case QtCriticalMsg:
logType = "Critical";
textColor = m_textEdit->palette().text().color(); // Колір для Critical
bracketColor = Qt::darkMagenta; // Колір для тексту в квадратних дужках
break;
case QtFatalMsg:
logType = "Fatal";
textColor = m_textEdit->palette().text().color(); // Колір для Fatal
bracketColor = Qt::darkYellow; // Колір для тексту в квадратних дужках
break;
}
QString message = QString("[%1] %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz")).arg(msg);
if (m_instance) {
emit m_instance->messageWrittenSignal(message);
}
if (m_textEdit) {
// Додаємо текст з відповідним кольором до QTextEdit
QTextCursor cursor(m_textEdit->document());
cursor.movePosition(QTextCursor::End);
QTextCharFormat textFormat;
textFormat.setForeground(textColor); // Встановлюємо колір тексту
QTextCharFormat bracketFormat;
bracketFormat.setForeground(bracketColor); // Встановлюємо колір тексту в квадратних дужках
cursor.setCharFormat(textFormat);
cursor.insertText("[");
cursor.setCharFormat(bracketFormat);
cursor.insertText(logType);
cursor.setCharFormat(textFormat);
cursor.insertText("] ");
cursor.setCharFormat(textFormat);
cursor.insertText(msg);
cursor.setCharFormat(bracketFormat);
cursor.insertText("\n");
m_textEdit->setTextCursor(cursor);
m_textEdit->ensureCursorVisible(); // Переміщуємо курсор до кінця документу
}
}