暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

实现图标编码自由,在QT中使用图标字体库

猿武场 2022-04-18
1698

「 QT 避坑指南 」远离那些曾经躺过的坑

  整理 | 猿胖子

  出品 | 猿武场(ID:apesarena)

关注公众号并回复数字「 1024 」加入猿武场微信社群 

在QT编写UI界面的过程中,经常会采用贴图做按钮图标。可能还会随按钮状态显示不同图片,如变色、加边框等效果的显示。

一般做法是不同状态通过加载不同图片来实现。但这种实现起来不是非常灵活,也会因图片格式、缩放失真等问题造成最终效果不理想。

更灵活的使用

当然,解决缩放失真这类问题可以采用SVG格式的图片。

这里推荐使用另一种方案, 图标字体 (Icon Font)。

什么是图标字体

图标字体是使用微小图像而不是字母形式的字体。与字符一样,每个图标字体都是矢量元素,可根据需要进行伸缩,并可以使用QSS样式进行修改。

使用图标字体的主要原因是你可以轻松更改大小,颜色,形状。图标字体本质上是透明的,因此你可以将它们放在任何颜色或类型的背景上,还可以添加笔触或更改图标的不透明度。

所有的设置操作均可以使用QSS样式控制。

图标字体是矢量图像,这意味着它们是可随意进行缩放而不失真的。与其他字体一样,你可以根据需要将它们设置更大或更小。仅将图标字体用作艺术元素,甚至在其他文本字段中。

常用的图标字体库

阿里巴巴图标库 iconfont

阿里巴巴出品的一个国内最大的字体图标库

主要是字体图标,包含彩色字体图标。持图标上传编辑,下载,在线管理,在线引用等多种方式操作。

最主要的是其中包含了很多阿里巴巴官方 图标库,质量高。

Font Awesome

现在使用的比较多的一个国外字体图标库,内置了非常非常多的图标字体,是一个比较全面的库,当然体积也比较大。

Remixicon 实例中采用的字体库

开源、图标精美,胖猿比较喜欢的一个库。

在QT中使用图标字体库

下载字体文件

QT工程新建资源文件,并将将下载好的图标字体(.ttf)文件添加进资源。

引入字体并获取字体名称

 1#include <QApplication>
2#include <QDebug>
3#include <QFontDatabase>
4
5int main(int argc, char *argv[])
6
{
7    QApplication a(argc, argv);
8
9    // 加入字体
10    QFontDatabase::addApplicationFont(":/fonts/remixicon.ttf"); 
11
12    MainWindow w;
13    w.show();
14    return a.exec();
15}

使用图标字体

具体代码,如下:

 1#include "mainwindow.h"
2#include <QLayout>
3#include <QGridLayout>
4#include <QLabel>
5
6MainWindow::MainWindow(QWidget *parent)
7    : QMainWindow(parent)
8{
9    this->setFixedSize(280220);
10    QWidget *main = new QWidget;
11
12    this->setCentralWidget(main);
13    QGridLayout *layout = new QGridLayout(main);
14
15    QFont iconFont("remixicon")// 图标字体
16
17    // icon ri_computer
18    QLabel *ri_computer = new QLabel("\uebc9");
19
20    ri_computer->setFont(iconFont);                              // 设置使用图标字体
21    ri_computer->setStyleSheet("font-size:42px;color:#FF5733;"); // 设置样式、图标大小、颜色
22
23    layout->addWidget(ri_computer, 00, Qt::AlignCenter);
24
25    // icon ri_4k
26    QLabel *ri_4k = new QLabel("\uea03");
27
28    ri_4k->setFont(iconFont);                              // 设置使用图标字体
29    ri_4k->setStyleSheet("font-size:28px;color:#273746;"); // 设置样式、图标大小、颜色
30
31    layout->addWidget(ri_4k, 01, Qt::AlignCenter);
32
33    // icon ri_apple
34    QLabel *ri_apple = new QLabel("\uea3f");
35
36    ri_apple->setFont(iconFont);                              // 设置使用图标字体
37    ri_apple->setStyleSheet("font-size:28px;color:#424949;"); // 设置样式、图标大小、颜色
38
39    layout->addWidget(ri_apple, 02, Qt::AlignCenter);
40
41    // icon ri_command
42    QLabel *ri_command = new QLabel("\uebb7");
43
44    ri_command->setFont(iconFont);                              // 设置使用图标字体
45    ri_command->setStyleSheet("font-size:28px;color:#DB5630;"); // 设置样式、图标大小、颜色
46
47    layout->addWidget(ri_command, 10, Qt::AlignCenter);
48
49    // icon ri_message
50    QLabel *ri_message = new QLabel("\uef43");
51
52    ri_message->setFont(iconFont);                              // 设置使用图标字体
53    ri_message->setStyleSheet("font-size:28px;color:#28B463;"); // 设置样式、图标大小、颜色
54
55    layout->addWidget(ri_message, 11, Qt::AlignCenter);
56
57    // icon ri_shield_check
58    QLabel *ri_shield_check = new QLabel("\uf0ff");
59
60    ri_shield_check->setFont(iconFont);                              // 设置使用图标字体
61    ri_shield_check->setStyleSheet("font-size:28px;color:#F4D03F;"); // 设置样式、图标大小、颜色
62
63    layout->addWidget(ri_shield_check, 12, Qt::AlignCenter);
64}
65
66MainWindow::~MainWindow()
67{}

程序运行效果

通过QSS设置,可以灵活改变颜色、大小、边框、等样式设置。

设置改变QLabel的Text内容来切换不同的图标显示。

使用图标字体的优点

  • 你可以在互联网上轻松获得既有的大型图标库;

  • 使用QSS更改图标属性非常容易;

  • 有数千种各种样式的图标可供选择;

  • 如果需要更高的自定义,你甚至可以创建自己的图标字体。

总结

图标字体如此受欢迎的原因之一是它们用途广泛且易于使用。

借助可扩展的格式,只需将字体文件引入项目中,就可以快速开始使用图标字体。


代 码 / 改 / 变 / 世 / 界
感谢您对猿武场的关注与支持

点击上方 关注: 猿武场(ID:apesarena) 


如果您喜欢本期内容欢迎 点亮 赞、在看、转发文章!

文章转载自猿武场,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论