refactor/pure-qt-ui #3

Merged
gaozheng merged 56 commits from refactor/pure-qt-ui into main 2026-06-10 18:41:53 +08:00
1 changed files with 16 additions and 2 deletions
Showing only changes of commit 6c34f71177 - Show all commits

View File

@ -5,6 +5,7 @@
#include <QFont>
#include <QObject>
#include <QPalette>
#include <QProxyStyle>
#include <QSettings>
#include <QStyleFactory>
#include <QStyleHints>
@ -14,6 +15,19 @@ namespace geopro::app {
namespace {
// 应用样式:在 Fusion 基础上把下拉框弹窗改为「列表紧贴文本框下方」(而非 Fusion 默认的
// 菜单式弹窗覆盖当前项——那会导致弹窗位置怪、容器+列表两层、选中不清)。
class AppProxyStyle : public QProxyStyle {
public:
AppProxyStyle() : QProxyStyle(QStyleFactory::create(QStringLiteral("Fusion"))) {}
int styleHint(StyleHint hint, const QStyleOption* opt, const QWidget* w,
QStyleHintReturn* ret) const override
{
if (hint == QStyle::SH_ComboBox_Popup) return 0;
return QProxyStyle::styleHint(hint, opt, w, ret);
}
};
// 全局样式表(浅色专业)。只描述外观,不含任何交互逻辑。
// 注意:刻意不重写 QCheckBox::indicator —— Fusion 一旦检测到 indicator 子控件被改写,
// 就需要自带勾选 image否则勾选态会变成空白方块。这里交给 Fusion 原生绘制,
@ -479,8 +493,8 @@ QPalette buildPalette(bool dark)
void applyThemeMode(QApplication& app, bool dark)
{
// Fusion:跨平台一致且对 QSS 友好Windows 原生风对部分控件会忽略样式表)
app.setStyle(QStyleFactory::create(QStringLiteral("Fusion")));
// Fusion + 下拉框弹窗修正AppProxyStyle跨平台一致、对 QSS 友好
app.setStyle(new AppProxyStyle());
// 基础字体:微软雅黑 UI基准字号取令牌 type::kBody(13px),与 QSS 同单位。
QFont base(QStringLiteral("Microsoft YaHei UI"));