refactor/pure-qt-ui #3
|
|
@ -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"));
|
||||
|
|
|
|||
Loading…
Reference in New Issue