技术专栏
Qt 控件图标SVG实现
Qt 控件图标SVG实现
应用程序开发时为了美观通常都会有几套皮肤,界面背景颜色、文字颜色等是可以调整rgb值切换成对应皮肤的颜色值,但是图标就不可以这样切换,除非提前加载所有皮肤的图标,但是这样就会加载很多份,浪费程序资源,这个时候我们就可以使用svg格式的图片,这样就可以动态修改图片颜色。
首先来讲一下是如何动态修改SVG的颜色的,使用文本文档打开SVG其实可以发现SVG就是xml格式的文件,所以我们可以通过修改节点属性修改图片的颜色。
加载SVG图标
//定义按钮
QToolButton *btn= new QToolButton ;
加载SVG文件 svg_path:文件路径
QSvgRenderer *svg_render = new QSvgRenderer(svg_path);
SVG转换QPixmap
定义QPixmap 对象
QPixmap *pixmap = new QPixmap(32, 32);
pixmap->fill(Qt::transparent);
//创建QPixmap 画布
QPainter painter(pixmap);
//将SVG图片写到画布中去
svg_render->render(&painter);
创建图标
QIcon ico(*pixmap);
//按钮设置图标
btn->setIcon(ico);
以上几行代码就是qt中显示SVG图片的方法,接下来要修改SVG图片,将svg文件读到xml对象中,然后修改颜色属性
QString path = svg_path;
//创建文件对象
QFile file(path);
//只读模式打开文件
file.open(QIODevice::ReadOnly);
//将文件读到data缓存中
QByteArray data = file.readAll();
//创建QDomDocument 对象
QDomDocument doc;
//将读出来的SVG数据写到QDomDocument 对象中
doc.setContent(data);
QString color = "#ff0000";
//修改颜色
SetSVGColor(doc.documentElement(), "path", "fill", color);
void SetSVGColor(QDomElement &elem, QString strtagname, QString strattr, QString strattrval)
{
if (elem.tagName().compare(strtagname) == 0)//查找节点
{
QString before_color = elem.attribute(strattr);
//修改属性
const_cast<QDomElement *>(&elem)->setAttribute(strattr, strattrval);
QString color = elem.attribute(strattr);
}
for (int i = 0; i < elem.childNodes().count(); i++)
{
if (!elem.childNodes().at(i).isElement())
{
continue;
}
SetSVGColor(elem.childNodes().at(i).toElement(), strtagname, strattr, strattrval);
}
}
下面给出一段SVG数据,复制粘贴保存.svg格式就可以了
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<path th d="M250 150 L150 350 L350 350 Z" fill="#00ff00" />
</svg>
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
1
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:2965次2020-05-06 15:52:54
-
浏览量:5824次2020-09-23 23:07:37
-
浏览量:4350次2020-11-09 15:33:37
-
浏览量:2279次2020-09-08 15:02:41
-
浏览量:4476次2020-09-13 21:46:11
-
浏览量:8808次2020-11-12 21:51:54
-
浏览量:3650次2020-08-19 18:27:30
-
浏览量:4164次2020-08-20 11:05:39
-
浏览量:8468次2020-11-23 18:55:41
-
浏览量:2183次2020-08-03 12:02:37
-
浏览量:1825次2020-08-03 12:01:28
-
浏览量:3158次2020-08-22 16:09:02
-
浏览量:6096次2021-07-16 15:43:25
-
浏览量:2463次2022-12-08 23:43:55
-
2023-01-18 15:27:01
-
浏览量:7961次2020-11-24 23:06:59
-
浏览量:4210次2020-10-28 23:08:53
-
浏览量:6505次2020-10-28 23:03:59
-
浏览量:3064次2017-11-28 12:33:29
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
小王子🤴
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注