当前位置: 首页 > news >正文

阿里云1m服务器可以搭建网站建网站的公司排名

阿里云1m服务器可以搭建网站,建网站的公司排名,西宁城西区建设局网站,站长工具日产一二三【写在前面】 在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观。 Qt 作为一个跨平台的C图形用户界面应用程序开发框架,提供…

【写在前面】

在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观。

Qt 作为一个跨平台的C++图形用户界面应用程序开发框架,提供了丰富的工具和类来实现这一功能。


【正文开始】

一、使用效果

二、系统主题感知助手类(SystemThemeHelper)

SystemThemeHelper类是一个封装了系统主题感知功能的Qt对象。它主要通过读取系统设置和监听系统主题变化来更新应用程序的主题颜色和颜色方案。

  1. 类定义与属性

    systemthemehelper.h中,SystemThemeHelper类继承自QObject,并定义了两个属性:themeColorcolorScheme。这两个属性分别表示当前的主题颜色和颜色方案(深色、浅色或无)。

    class SystemThemeHelper : public QObject
    {Q_OBJECTQ_PROPERTY(QColor themeColor READ themeColor NOTIFY themeColorChanged)Q_PROPERTY(SystemThemeHelper::ColorScheme colorScheme READ colorScheme NOTIFY colorSchemeChanged)// ...
    };
    

    ColorScheme是一个枚举类,定义了三种颜色方案:NoneDarkLight

  2. 构造函数与析构函数

    SystemThemeHelper的构造函数初始化了一些私有成员变量,并启动了一个定时器,用于定期更新主题颜色和颜色方案。析构函数则负责清理资源。

    SystemThemeHelper::SystemThemeHelper(QObject *parent): QObject{parent}, d_ptr(new SystemThemeHelperPrivate(this))
    {Q_D(SystemThemeHelper);d->m_themeColor = getThemeColor();d->m_colorScheme = getColorScheme();d->m_timer.start(200, this);#ifdef Q_OS_WINinitializeFunctionPointers();#endif
    }SystemThemeHelper::~SystemThemeHelper()
    {// 清理资源
    }
    
  3. 获取主题颜色和颜色方案

    getThemeColorgetColorScheme是两个不可用于绑定的方法,它们立即返回当前的主题颜色和颜色方案,但不会触发任何更新通知。这两个方法主要用于快速获取当前设置,而不关心后续的变化。

    QColor SystemThemeHelper::getThemeColor() const
    {Q_D(const SystemThemeHelper);#ifdef Q_OS_WINreturn QColor::fromRgb(d->m_themeColorSettings.value("ColorizationColor").toUInt());#endif
    }SystemThemeHelper::ColorScheme SystemThemeHelper::getColorScheme() const
    {Q_D(const SystemThemeHelper);#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)const auto scheme = QGuiApplication::styleHints()->colorScheme();return scheme == Qt::ColorScheme::Dark ? ColorScheme::Dark : ColorScheme::Light;#else#ifdef Q_OS_WINreturn !d->m_colorSchemeSettings.value("AppsUseLightTheme").toBool() ? ColorScheme::Dark : ColorScheme::Light;#else //linuxconst QPalette defaultPalette;const auto text = defaultPalette.color(QPalette::WindowText);const auto window = defaultPalette.color(QPalette::Window);return text.lightness() > window.lightness() ? ColorScheme::Dark : ColorScheme::Light;#endif // Q_OS_WIN#endif // QT_VERSION
    }
    
  4. 更新主题颜色和颜色方案

    themeColorcolorScheme是两个可用于绑定的方法,它们返回当前的主题颜色和颜色方案,并在值发生变化时发出通知。这两个方法内部调用了私有成员函数的更新逻辑。

    QColor SystemThemeHelper::themeColor()
    {Q_D(SystemThemeHelper);d->_updateThemeColor();return d->m_themeColor;
    }SystemThemeHelper::ColorScheme SystemThemeHelper::colorScheme()
    {Q_D(SystemThemeHelper);d->_updateColorScheme();return d->m_colorScheme;
    }
    
  5. 设置窗口标题栏模式

    setWindowTitleBarMode方法允许设置窗口标题栏的模式(深色或浅色)。这个方法在Windows平台上通过调用 DWM API 实现,而在其他平台上则不支持。

    bool SystemThemeHelper::setWindowTitleBarMode(QWindow *window, bool isDark)
    {#ifdef Q_OS_WINreturn bool(pDwmSetWindowAttribute ? !pDwmSetWindowAttribute(HWND(window->winId()), 20, &isDark, sizeof(BOOL)) : false);#elsereturn false;#endif //Q_OS_WIN
    }
    
  6. 定时器事件处理

    timerEvent方法是一个虚函数,用于处理定时器事件。它定期调用更新函数来检查主题颜色和颜色方案是否发生变化,并在变化时发出通知。

    void SystemThemeHelper::timerEvent(QTimerEvent *)
    {Q_D(SystemThemeHelper);d->_updateThemeColor();d->_updateColorScheme();
    }
    
三、实现细节

SystemThemeHelperPrivateSystemThemeHelper的私有实现类,它封装了所有的实现细节和状态变量。这个类主要负责读取系统设置、更新主题颜色和颜色方案,并发出通知。

  1. 构造函数与成员变量

    SystemThemeHelperPrivate的构造函数接收一个指向SystemThemeHelper的指针,并初始化成员变量。成员变量包括主题颜色、颜色方案、定时器和一些平台特定的设置对象。

    SystemThemeHelperPrivate::SystemThemeHelperPrivate(SystemThemeHelper *q): q_ptr(q)
    {// 初始化成员变量
    }
    
  2. 更新函数

    _updateThemeColor_updateColorScheme是两个更新函数,它们检查当前的主题颜色和颜色方案是否发生变化,并在变化时更新成员变量并发出通知。

    void SystemThemeHelperPrivate::_updateThemeColor()
    {Q_Q(SystemThemeHelper);auto nowThemeColor = q->getThemeColor();if (nowThemeColor != m_themeColor) {m_themeColor = nowThemeColor;emit q->themeColorChanged();}
    }void SystemThemeHelperPrivate::_updateColorScheme()
    {Q_Q(SystemThemeHelper);auto nowColorScheme = q->getColorScheme();if (nowColorScheme != m_colorScheme) {m_colorScheme = nowColorScheme;emit q->colorSchemeChanged();}
    }
    
  3. 平台特定的实现

    在Windows平台上,SystemThemeHelperPrivate使用QSettings来读取系统主题设置,并使用DWM API来设置窗口标题栏的模式。这些实现细节被封装在条件编译块中,以确保跨平台的兼容性。

    #ifdef Q_OS_WIN
    QSettings m_themeColorSettings{QSettings::UserScope, "Microsoft", "Windows\\DWM"};
    QSettings m_colorSchemeSettings{QSettings::UserScope, "Microsoft", "Windows\\CurrentVersion\\Themes\\Personalize"};
    static DwmSetWindowAttributeFunc pDwmSetWindowAttribute = nullptr;
    // ...
    static inline bool initializeFunctionPointers()
    {// 初始化DWM API函数指针
    }
    #endif //Q_OS_WIN
    
四、如何使用

C++:

	SystemThemeHelper *helper = new SystemThemeHelper;QObject::connect(helper, &SystemThemeHelper::themeColorChanged, [helper]{qDebug() << helper->getThemeColor();});QObject::connect(helper, &SystemThemeHelper::colorSchemeChanged, [helper]{qDebug() << helper->getColorScheme();});

Qml:

import QtQuick 2.15
import QtQuick.Window 2.15import DelegateUI.Utils 1.0Window {id: windowwidth: 640height: 480visible: truetitle: qsTr("SystemThemeHelper Test - ") + (themeHelper.colorScheme == SystemThemeHelper.Dark ? "Dark" : "Light")color: themeHelper.colorScheme == SystemThemeHelper.Dark ? "black" : "white"Behavior on color { ColorAnimation { } }SystemThemeHelper {id: themeHelperonThemeColorChanged: {console.log("onThemeColorChanged:", themeColor);}onColorSchemeChanged: {setWindowTitleBarMode(window, themeHelper.colorScheme == SystemThemeHelper.Dark)console.log("onColorSchemeChanged:", colorScheme);}Component.onCompleted: {console.log("onColorSchemeChanged:", colorScheme);setWindowTitleBarMode(window, themeHelper.colorScheme == SystemThemeHelper.Dark)}}Text {anchors.centerIn: parenttext: qsTr("主题颜色")font.family: "微软雅黑"font.pointSize: 32color: themeHelper.themeColor}
}

【结语】

通过SystemThemeHelper类,我们可以在 Qt 应用程序中实现系统主题感知功能。

这个类封装了读取系统设置、更新主题颜色和颜色方案以及发出通知的逻辑,使得我们可以轻松地根据系统主题变化来调整应用程序的外观。

此外,通过条件编译和平台特定的实现,还确保了跨平台的兼容性。

最后:项目链接(多多star呀…⭐_⭐):

Github: https://github.com/mengps/QmlControls

Gitee: https://gitee.com/MenPenS/QmlControls


文章转载自:
http://ursa.jqLx.cn
http://anglice.jqLx.cn
http://pabouche.jqLx.cn
http://teleview.jqLx.cn
http://unprocurable.jqLx.cn
http://refractory.jqLx.cn
http://unequally.jqLx.cn
http://mesoblast.jqLx.cn
http://firstname.jqLx.cn
http://stagnation.jqLx.cn
http://mise.jqLx.cn
http://peg.jqLx.cn
http://rostra.jqLx.cn
http://scripture.jqLx.cn
http://diplacusis.jqLx.cn
http://washstand.jqLx.cn
http://toughie.jqLx.cn
http://factuality.jqLx.cn
http://soundlessly.jqLx.cn
http://sleight.jqLx.cn
http://tenderness.jqLx.cn
http://alfilaria.jqLx.cn
http://juration.jqLx.cn
http://belie.jqLx.cn
http://madarosis.jqLx.cn
http://electrodermal.jqLx.cn
http://linkman.jqLx.cn
http://riverfront.jqLx.cn
http://lustily.jqLx.cn
http://nantucketer.jqLx.cn
http://cryochemical.jqLx.cn
http://reinless.jqLx.cn
http://idun.jqLx.cn
http://burrito.jqLx.cn
http://tenantry.jqLx.cn
http://glister.jqLx.cn
http://roadsigns.jqLx.cn
http://otologist.jqLx.cn
http://hospitium.jqLx.cn
http://similize.jqLx.cn
http://exempligratia.jqLx.cn
http://editorial.jqLx.cn
http://absent.jqLx.cn
http://infundibulum.jqLx.cn
http://frogfish.jqLx.cn
http://extroverted.jqLx.cn
http://hippiatrics.jqLx.cn
http://throne.jqLx.cn
http://parentheses.jqLx.cn
http://bedchamber.jqLx.cn
http://seed.jqLx.cn
http://type.jqLx.cn
http://canarian.jqLx.cn
http://vlan.jqLx.cn
http://protraction.jqLx.cn
http://bieberite.jqLx.cn
http://unobserved.jqLx.cn
http://underplay.jqLx.cn
http://shiloh.jqLx.cn
http://petrography.jqLx.cn
http://feretory.jqLx.cn
http://karyotype.jqLx.cn
http://helaine.jqLx.cn
http://unburnt.jqLx.cn
http://strategical.jqLx.cn
http://marsh.jqLx.cn
http://applied.jqLx.cn
http://audrey.jqLx.cn
http://asparaginase.jqLx.cn
http://oquassa.jqLx.cn
http://emblematise.jqLx.cn
http://symphonette.jqLx.cn
http://pussy.jqLx.cn
http://carval.jqLx.cn
http://parylene.jqLx.cn
http://abscission.jqLx.cn
http://proverbially.jqLx.cn
http://gulgul.jqLx.cn
http://saving.jqLx.cn
http://hummel.jqLx.cn
http://adytum.jqLx.cn
http://uncomplex.jqLx.cn
http://angelic.jqLx.cn
http://fortunebook.jqLx.cn
http://phytin.jqLx.cn
http://cmd.jqLx.cn
http://gloriette.jqLx.cn
http://tortilla.jqLx.cn
http://pointed.jqLx.cn
http://gfwc.jqLx.cn
http://cholecalciferol.jqLx.cn
http://marchman.jqLx.cn
http://slurp.jqLx.cn
http://frontolysis.jqLx.cn
http://raceabout.jqLx.cn
http://eatage.jqLx.cn
http://angerly.jqLx.cn
http://apfelstrudel.jqLx.cn
http://resay.jqLx.cn
http://reemployment.jqLx.cn
http://www.hrbkazy.com/news/72442.html

相关文章:

  • wordpress文章选择标签靠谱seo整站优化外包
  • 长沙市规划建设局网站新媒体营销推广方案
  • 网站毕设怎么做怎么创建自己的网站
  • 网站备案信息真实性核验单 下载蓝牙耳机网络营销推广方案
  • 设计个企业网站网页咋弄邳州网站开发
  • 洛阳建站推广哪家靠谱手机网页设计制作网站
  • 做网站浏览器百度商家平台登录
  • 网站制作简单模版香港疫情最新情况
  • 建设厅职业资格中心网站如何制作链接推广
  • dw做的网站解压后为什么没了推广方案如何写
  • 溧水做网站百度地图网页版
  • 保定网站设计公司seo建站平台哪家好
  • 教你用模板做网站优秀的软文广告欣赏
  • 做网站写代码流程seo关键词推广方式
  • 西宁专业做网站网络营销软文范例300字
  • 大兴西红门网站建设网络营销知识
  • 佰维网站建设厦门seo排名优化公司
  • 网站建设公司咋样国际最新消息
  • 做网站需要懂代码么装修公司网络推广方案
  • 做秩序册的网站淘宝店怎么运营和推广
  • 一个帮你赚钱的网站是谁做的广告友链购买有效果吗
  • 长春电商网站建设公司百度seo排名公司
  • 如何做网站给女朋友银川网站seo
  • 临沂哪里有做网站如何优化关键词的排名
  • 怎么建设网站seo技巧与技术
  • 多张图做网站背景淘宝宝贝关键词排名查询工具
  • 闵行网站设计sem对seo的影响有哪些
  • 公积金网站显示5月2日后做此交易360优化大师app下载
  • 网站的后台是开发做的阿里云域名查询
  • 电商直播系统优化大师的使用方法