优化若干性能问题
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "ElaTheme.h"
|
||||
#include "src/utils/configmanager.h"
|
||||
#include "src/utils/logmanager.h"
|
||||
#include "src/utils/Constants.h"
|
||||
#include "src/utils/version.h"
|
||||
#include <QApplication>
|
||||
#include <QElapsedTimer>
|
||||
@@ -113,6 +114,12 @@ int main(int argc, char *argv[])
|
||||
QApplication a(argc, argv);
|
||||
a.setWindowIcon(QIcon(":resources/images/ChangeCode.png"));
|
||||
|
||||
// 日志初始化提前到单实例检测之前: 双实例退出路径的警告必须能落盘,
|
||||
// 否则 writeLog 的文件分支静默跳过, "检测到已有实例"只上控制台无痕迹。
|
||||
// QApplication 已就绪, initLogConfig 依赖的 applicationDirPath 可用
|
||||
LogManager::instance()->initLogConfig();
|
||||
LogManager::instance()->initLogFile();
|
||||
|
||||
// 单实例保护: 双开会并发互写日志文件、并发覆盖 config.ini, 还会重复弹出升级提示。
|
||||
// QLockFile 持有方进程崩溃后残留锁可被下次启动自动接管(按锁内 PID 探测存活)
|
||||
const QString lockPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation)
|
||||
@@ -156,14 +163,16 @@ int main(int argc, char *argv[])
|
||||
// 排除用户输入事件: 启动阶段积压的鼠标/键盘事件若被分发, 可能触发意料之外的
|
||||
// 焦点/点击行为(例如误点即将出现的窗口), 只处理绘制类事件保证 splash 正常上屏
|
||||
a.processEvents(QEventLoop::ExcludeUserInputEvents);
|
||||
// 强制全量同步重绘: show 后首个 paint 可能只覆盖部分暴露区域(分块 flush),
|
||||
// 而后续 MainWindow 构造期约 340ms 事件循环饥饿, 未 flush 的区域保持
|
||||
// 未初始化白色, 表现为启动画面"上半蓝、下半白"残影
|
||||
splash.update();
|
||||
splash.repaint();
|
||||
|
||||
// 安装全局过滤器:所有页面文字 / 表格树单元格允许用户复制
|
||||
TextSelectableFilter textSelectableFilter;
|
||||
a.installEventFilter(&textSelectableFilter);
|
||||
|
||||
// 日志初始化提前到启动最前: 此后所有分段耗时都能落盘, 便于排查启动瓶颈
|
||||
LogManager::instance()->initLogConfig();
|
||||
LogManager::instance()->initLogFile();
|
||||
mark("QApplication 就绪");
|
||||
|
||||
eApp->init();
|
||||
@@ -173,15 +182,15 @@ int main(int argc, char *argv[])
|
||||
// 必须在主窗口构造前设置, 保证主窗口首帧即为正确主题, 避免启动后闪色。
|
||||
// 此前主题从未被应用(设置页 onThemeChanged 为空), 界面始终是 Ela 默认夜间模式
|
||||
{
|
||||
QSettings settings("UFT30", "ChangeCode");
|
||||
const QString theme = settings.value("Theme", "夜间模式").toString();
|
||||
QSettings settings(Constants::AppSettings::Org, Constants::AppSettings::App);
|
||||
const QString theme = settings.value(Constants::AppSettings::ThemeKey,
|
||||
Constants::AppSettings::ThemeDark).toString();
|
||||
ElaTheme::getInstance()->setThemeMode(
|
||||
theme == QString::fromUtf8("日间模式") ? ElaThemeType::Light : ElaThemeType::Dark);
|
||||
theme == Constants::AppSettings::ThemeLight ? ElaThemeType::Light : ElaThemeType::Dark);
|
||||
mark("主题模式应用完成");
|
||||
}
|
||||
|
||||
QString basePath = QCoreApplication::applicationDirPath();
|
||||
ConfigManager::instance()->loadConfig(basePath);
|
||||
ConfigManager::instance()->loadConfig();
|
||||
mark("config.ini 加载完成");
|
||||
|
||||
int exitCode = 0;
|
||||
|
||||
Reference in New Issue
Block a user