-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
99 lines (81 loc) · 3.16 KB
/
main.cpp
File metadata and controls
99 lines (81 loc) · 3.16 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
#include "widget.h"
#include "appsettings.h"
#include <QApplication>
#include <QFontDatabase>
#include <QDebug>
#include <QMap>
// 全局字体映射表
static QMap<QString, QString> g_fontFamilyMap;
// 加载所有嵌入字体
void loadAllEmbeddedFonts() {
struct FontInfo {
QString path;
QString displayName;
};
QList<FontInfo> fonts = {
{":/new/prefix1/recf/HarmonyOS_Sans_SC_Regular.ttf", "HarmonyOS Sans SC"},
{":/new/prefix1/recf/AlibabaPuHuiTi-3-45-Light.ttf", "Alibaba PuHuiTi"},
{":/new/prefix1/recf/MiSans-Normal.ttf", "MiSans"}
};
for (const auto &font : fonts) {
int fontId = QFontDatabase::addApplicationFont(font.path);
if (fontId != -1) {
QStringList families = QFontDatabase::applicationFontFamilies(fontId);
if (!families.isEmpty()) {
g_fontFamilyMap[font.displayName] = families.at(0);
qDebug() << "成功加载字体:" << font.displayName << "->" << families.at(0);
}
} else {
qDebug() << "字体加载失败:" << font.path;
}
}
}
// 保存Default字体
static QFont g_systemDefaultFont;
// 应用字体设置
void applyFont(const QString &displayName, int fontSize) {
QFont customFont;
if (displayName == "Default") {
// 使用Default字体
customFont = g_systemDefaultFont;
customFont.setPointSize(fontSize);
// qDebug() << "应用Default字体:" << customFont.family() << "大小:" << fontSize;
} else {
QString actualFamily = g_fontFamilyMap.value(displayName, displayName);
customFont = QFont(actualFamily, fontSize);
// qDebug() << "应用字体:" << actualFamily << "大小:" << fontSize;
}
QApplication::setFont(customFont);
// 强制刷新所有顶层窗口的字体
for (QWidget *widget : QApplication::topLevelWidgets()) {
widget->setFont(customFont);
// 递归更新所有子控件
for (QWidget *child : widget->findChildren<QWidget*>()) {
child->setFont(customFont);
}
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 保存Default字体(在加载任何自定义字体之前)
g_systemDefaultFont = QApplication::font();
// 加载所有嵌入字体
loadAllEmbeddedFonts();
// 从设置中获取字体配置
AppSettings *settings = AppSettings::instance();
// qDebug() << "启动时读取设置 - 字体:" << settings->fontFamily() << "大小:" << settings->fontSize();
// applyFont(settings->fontFamily(), settings->fontSize());
// 连接字体变更信号
QObject::connect(settings, &AppSettings::fontFamilyChanged, [settings](const QString &family) {
applyFont(family, settings->fontSize());
});
QObject::connect(settings, &AppSettings::fontSizeChanged, [settings](int size) {
applyFont(settings->fontFamily(), size);
});
Widget mainWindow;
// Widget 创建后再次应用字体,确保所有控件都使用正确的字体
applyFont(settings->fontFamily(), settings->fontSize());
mainWindow.show();
return a.exec();
}