Files
EJM_Display/main.cpp

145 lines
4.6 KiB
C++
Raw Normal View History

2025-08-20 23:06:28 +08:00
#include "LaunchPage.h"
#include <QApplication>
2025-09-15 22:28:43 +08:00
#include <QLoggingCategory>
2025-08-20 23:06:28 +08:00
#include <QLocale>
#include <QTranslator>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QMutex>
#include <QDir>
#include <QDebug>
#include <QScreen>
#include <GlobalDefinitions/Configure.h>
#include <GlobalDefinitions/Variable.h>
QtMessageHandler gDefaultHandler = NULL; // 程序集变量,用于保存默认的消息处理函数
#if CONFIG_EN_LOG
/**
* @brief myMessageOutput
* @param type
* @param context
* @param msg
*/
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QString strMsg("");
switch(type)
{
case QtDebugMsg:
strMsg = QString("调试");
break;
case QtWarningMsg:
strMsg = QString("警告");
break;
case QtCriticalMsg:
strMsg = QString("错误");
break;
case QtFatalMsg:
strMsg = QString("严重");
break;
case QtInfoMsg:
strMsg = QString("信息");
break;
default:
strMsg = QString("未知");
break;
}
QDateTime time = QDateTime::currentDateTime();
QString strTime = time.toString("yyyy-MM-dd hh:mm:ss");
QString fileName = context.file ? context.file : "未知";
int line = context.line ? context.line : -1;
QString function = context.function ? context.function : "未知";
QString strMessage = QString("%1 文件:(%2)行:[%3] 函数名:{%4} %5>> %6")
.arg(strTime).arg(fileName).arg(line).arg(function).arg(strMsg).arg(msg);
// 加锁
static QMutex mutex;
mutex.lock();
//用系统原来的函数完成原来的功能. 比如输出到调试窗
if(gDefaultHandler)
{
switch(type)
{
case QtDebugMsg:
gDefaultHandler(type,context,"\033[36m"+strMessage);
break;
case QtWarningMsg:
gDefaultHandler(type,context,"\033[33m"+strMessage);
break;
case QtCriticalMsg:
gDefaultHandler(type,context,"\033[35m"+strMessage);
break;
case QtFatalMsg:
gDefaultHandler(type,context,"\033[31m"+strMessage);
break;
case QtInfoMsg:
gDefaultHandler(type,context,"\033[32m"+strMessage);
break;
default:
gDefaultHandler(type,context,"\033[27m"+strMessage);
break;
}
}
// 输出信息至文件中(读写、追加形式)
QString current_time = QDateTime::currentDateTime().toString("yyyy_MM_dd");
// 获取当前目录,如果目录不存在则创建
QString fullPath = qApp->applicationDirPath()+ "/Log/";
QDir dir(fullPath);
if(!dir.exists()) dir.mkdir(fullPath);
// 输出信息至文件中(读写、追加形式)
QFile file(fullPath+current_time+CONFIG_LOG_SUFFIX);
file.open(QIODevice::ReadWrite | QIODevice::Append);
QTextStream stream(&file);
stream << strMessage << "\r\n";
file.flush();
file.close();
// 解锁
mutex.unlock();
}
#endif
int main(int argc, char *argv[])
{
#if CONFIG_EN_DPI //开启高DPI
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QApplication a(argc, argv); // 创建一个QApplication对象它是所有GUI程序的起点
2025-09-15 22:28:43 +08:00
// 打印 Qt 自带调试信息
//QLoggingCategory::setFilterRules("*.debug=true");
qputenv("QT_RESOURCE_DEBUG", "1"); // 开启资源加载调试
2025-08-20 23:06:28 +08:00
#if CONFIG_EN_LOG
gDefaultHandler = qInstallMessageHandler(myMessageOutput);//注册日志函数,在其它地方调用qInstallMessageHandler设置新的输出函数但保存原来的函数
#endif
#if defined(Q_OS_LINUX) // 判断操作系统是否为Linux
qDebug()<<"操作系统为:Linux";
#elif defined(Q_OS_WIN) // 判断操作系统是否为Windows
qDebug()<<"操作系统为:Windows";
#else // 如果不是Linux也不是Windows
qDebug()<<"操作系统为:其他操作系统";
#endif
#if CONFIG_EN_DISPLAY_INFO // 获取默认屏幕
DisplayInfo = QGuiApplication::primaryScreen()->geometry();
#endif
QTranslator translator;
const QStringList uiLanguages = QLocale::system().uiLanguages();
for (const QString &locale : uiLanguages) {
const QString baseName = "EJM_JueMao_" + QLocale(locale).name();
if (translator.load(":/i18n/" + baseName)) {
a.installTranslator(&translator);
break;
}
}
LaunchPage w;
w.show();
return a.exec();
}