Files
EJM_Display/main.cpp

175 lines
5.8 KiB
C++
Raw Normal View History

2025-08-20 23:06:28 +08:00
#include "LaunchPage.h"
2025-09-28 17:14:34 +08:00
#include <QObject>
2025-08-20 23:06:28 +08:00
#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>
2025-10-20 22:28:37 +08:00
#include <Threads/MultiCoreManager.h>
2025-08-20 23:06:28 +08:00
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
2025-10-20 22:28:37 +08:00
int main(int argc, char *argv[]){
2025-08-20 23:06:28 +08:00
#if CONFIG_EN_DPI //开启高DPI
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
2025-10-20 22:28:37 +08:00
// 设置Qt全局线程池使所有核心都能参与处理
QThreadPool::globalInstance()->setMaxThreadCount(QThread::idealThreadCount());
QThreadPool::globalInstance()->setExpiryTimeout(-1); // 线程永不过期
2025-08-20 23:06:28 +08:00
QApplication a(argc, argv); // 创建一个QApplication对象它是所有GUI程序的起点
2025-09-15 22:28:43 +08:00
// 打印 Qt 自带调试信息
//QLoggingCategory::setFilterRules("*.debug=true");
2025-09-28 17:14:34 +08:00
//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
2025-10-20 22:28:37 +08:00
// 优化QApplication的多线程处理能力
QApplication::setOrganizationName("EJM_Display");
QApplication::setApplicationName("EJM_JueMao_Sync");
// 初始化全局多核心管理器
//MultiCoreManager* coreManager = MultiCoreManager::instance();
// 打印CPU核心信息
int cpuCount = QThread::idealThreadCount();
qDebug() << "系统CPU核心数量: " << cpuCount;
qDebug() << "Qt全局线程池最大线程数: " << QThreadPool::globalInstance()->maxThreadCount();
qDebug() << "全局多核心管理器已初始化";
2025-08-20 23:06:28 +08:00
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;
}
}
2025-09-30 15:36:46 +08:00
// 屏蔽QOpenGLContext::swapBuffers()的警告
QLoggingCategory::setFilterRules(
"qt.opengl.context.swapBuffers=false\n"
"Qt3DRender::QOpenGLContext.swapBuffers=false"
);
2025-08-20 23:06:28 +08:00
LaunchPage w;
2025-09-28 17:14:34 +08:00
2025-08-20 23:06:28 +08:00
w.show();
2025-10-20 22:28:37 +08:00
// 程序退出前清理多核心管理器
int result = a.exec();
// 等待所有后台任务完成
//coreManager->waitForDone(1000);
return result;
2025-08-20 23:06:28 +08:00
}