#include "LaunchPage.h" #include #include #include #include #include #include #include #include #include #include #include #include #include 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程序的起点 // 打印 Qt 自带调试信息 //QLoggingCategory::setFilterRules("*.debug=true"); qputenv("QT_RESOURCE_DEBUG", "1"); // 开启资源加载调试 #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(); }