CQGUI框架之样式管理
大家好,我是IT文艺男,来自一线大厂的一线程序员
今天给大家讲解基于C++/Qt的CQGUI框架的样式管理实现。
在Qt平台,实现窗口/控件美化或者自定义效果,有如下两种方式
- 重绘
- 样式
对于重绘,我之前实现的一个效果如下图所示::
对于样式,我之前实现的一个效果如下图所示::
因此,有了重绘以及样式,就能实现高级、复杂的、优雅的UI效果;设计部有什么好的UI效果图,程序员就能把它实现。
Qt样式(Qt StyleSheet,QSS)
QSS的主要功能是使界面的表现与界面的元素分离,使得设计成皮肤与界面控件分离的软件成为可能。QSS的概念、术语、语法很大程度上受到了CSS层叠样式表的影响;由于是所见即所得方式,QSS使用很方便
样式加载方式
- 在代码中直接嵌入
- 通过文件加载
优先推荐使用文件加载方式,与代码脱离
CQGUI框架样式
- 公共样式
- 插件样式
一、类职责
class StyleSheetManager : public QObject
二、类方法
class StyleSheetManager : public QObject
{
Q_OBJECT
public:
explicit StyleSheetManager(QObject *parent = NULL);
void setStyleSheets(int theme, const std::string& font);
void setStylesForApp(int theme, const std::string& font);
void setStyleSheetForPlugin(const QString& plgName, int theme);
};
主要提供设置公共样式、插件样式的函数接口;与CQGUI框架的样式逻辑保持一致
三、样式文件集合
CQGUI框架的样式文件集合如下图所示::
四、加载公共样式
QString apppath = QString(":/style/style%1/app.qss").arg(theme);
if (QFile::exists(apppath))
{
QFile fileapp(apppath);
if (fileapp.open(QFile::ReadOnly))
{
qss.append(fileapp.readAll().data());
qApp->setStyleSheet(qss.toUtf8());
}
}
五、加载插件样式
QString styleSheetPath = QString(":/style/style%1/%2.qss").arg(theme).arg(plgName);
if (QFile::exists(styleSheetPath))
{
QFile file(styleSheetPath);
//获取插件
QObject* plugin = UIGolbalManager::GetUIGolbalManager()->GetPluginInstanceQt(plgName);
if (plugin)
{
auto *plug = dynamic_cast<UIPluginInterface *>(plugin);
if (plug)
{
if (file.open(QFile::ReadOnly))
{
QString qss = QString::fromUtf8(file.readAll());
plug->setStyleSheet(qss.toUtf8());
}
}
}
}
今天就讲解到这里,更详细的代码分析与讲解,请关注微信公众号(itwenyinan),观看对应的的视频版讲解;谢谢
CQGUI框架之样式管理的更多相关文章
- CQGUI框架之阴影圆角窗口实现
CQGUI框架之阴影圆角窗口实现 大家好,我是IT文艺男,来自一线大厂的一线程序员 今天给大家讲解基于C++/Qt的CQGUI框架的阴影圆角窗口实现,实现效果如下图所示:: CQGUI开发环境:: M ...
- seaborn使用(样式管理)
seaborn使用(样式管理) Seaborn是一个在Python中制作具有吸引力和丰富信息的统计图形的库.它建立在matplotlib之上,并与PyData堆栈紧密集成,包括支持scipy和pand ...
- vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法
vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法 在vue 里面<style scoped></style> 是为了让样式只影响本身自己组件的样式,不改变全 ...
- MUI框架-08-窗口管理-创建子页面
MUI框架-08-窗口管理-创建子页面 之前写过这一篇,不知道为什么被删了,我就大概写了,抱歉 创建子页面是为了,页面切换时,外面的页面不动,让 MUI 写出来的页面更接近原生 app 官方文档:ht ...
- Spring 框架的事务管理
1. Spring 框架的事务管理相关的类和API PlateformTransactionManager 接口: 平台事务管理器(真正管理事务的类); TransactionDefinition 接 ...
- Django框架 之 admin管理工具(组件使用)
Django框架 之 admin管理工具(组件使用) 浏览目录 激活管理工具 使用管理工具 admin的定制 admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理 ...
- Spring框架之事务管理
Spring框架之事务管理 一.事务的作用 将若干的数据库操作作为一个整体控制,一起成功或一起失败. 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 一致性:指事务前后 ...
- MVC+WCF框架下广告位管理——文件上传
广告位是站点中不可缺少的内容之中的一个.也是能直接给我们站点带来经济收益的内容之中的一个. 好的广告位不仅不会强宾压主,而会为我们的站点锦上添花.起到画龙点睛的作用.因此设计好广告位也是开发过程中一大 ...
- 使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件
环境:Windows 64位 PHP 版本: 框架:ThinkPHP Tips: 组件:打包的代码,可以是一系列相关的类(class).接口(interface).特性(trait),用于解决某个具体 ...
随机推荐
- OAuth 2.0 All In One
OAuth 2.0 All In One 授权类型 授权代码 隐式 密码凭证 客户端凭证 授权码 授权码授予类型要求用户向提供者进行身份验证-然后将授权码发送回客户端应用程序,提取并与提供者交换以获取 ...
- 密码 & 安全
密码 & 安全 拖库/脱库 如何在数据库中存储密码更安全? https://time.geekbang.org/dailylesson/detail/100044031 拖库和撞库 https ...
- Linux下部署Apache+PHP
Linux下部署Apache+PHP 编辑于2021-02-19 本文中Apache配置文件目录为/etc/httpd/conf/httpd.conf,PHP安装目录为/usr/local/php 一 ...
- C#使用OpenCV剪切图形中的人物头像
前言 本文主要介绍如何使用OpenCV剪切图形中的人物头像. 准备工作 首先创建一个Wpf项目--OpenCV_Face_Wpf,这里版本使用Framework4.7.2. 然后使用Nuget搜索[E ...
- oracle数据库date类型和mysql数据库datetime类型匹配
oracle数据库有date类型,但是没有datetime类型 mysql数据库既有date类型也有datetime类型. Oracle数据库的date类型和mysql的date类型是不一样的,Ora ...
- Pygame基础(1)
Pygame是Python的一个很常用的游戏框架,今天我来讲一讲Pygame的基础知识 Pygame的官网:https://www.pygame.org/news Pygame的下载 打开cmd输入p ...
- 顶级c程序员之路 选学篇-1 深入理解字节,字节序与字节对齐
深入理解字节,字节序与字节对齐 一 总述 作为一个职业的coder玩家,首先应该对计算机的字节有所了解. 我们经常谈到的2进制流,字节(字符)流,数据类型流(针对编程),结构流等说法,2进制流,0和 ...
- MySQL注入流程
目录 确认注入点 信息收集 数据获取 提权 写个MySQL注入流程的大纲,类似一份全局地图,能指导下一步工作.MySQL注入流程分为四步: 确认注入点 信息收集 数据获取 提权 确认注入点 参考:ht ...
- Serverless 2.0,鸡蛋还是银弹?
简介: 本篇旨在介绍 Serverless 如今应用到应用(非病句)的各种困境,以及帮助用户如何去规避一些问题,提前了解方向. 浪潮 从 2014 年 Serverless 冒头至今,已经有无数的勇士 ...
- Vue.js 可排序列表 (Sortable & Searchable Tables) 组件
可排序表格 (Sortable & Searchable Tables) 在网页和表单设计中非常常用.用户可以通过点击表头对将表格以该列做顺序或降序排列,也可以利用 Search Box 对表 ...