发布于 

Qt 内置 Icon

在 Qt 中,内置了许多图标,我们在设计应用程序时,可以使用这些图标。

有哪些图标

使用标准图标的好处是,应用风格与当前系统相统一。

我们可以遍历这些图标,以便日后方便使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
auto layout = new QGridLayout();

QMetaEnum sp = QMetaEnum::fromType<QStyle::StandardPixmap>(); // 将标准Pixmap枚举转换为QMetaEnum
auto style = QApplication::style(); // 获取当前App的style

int colNum = 4; // 设置显示4列
int count = sp.keyCount(); // 图标总数
for (int i = 0; i < count; i++) {
auto iconName = sp.key(i); // 获取图标名称
auto pixmap = (QStyle::StandardPixmap) i; // 获取对应的Pixmap
auto icon = style->standardIcon(pixmap); // 创建图标

// 将图标添加到按钮中
auto button = new QPushButton(icon, QString::asprintf("%02d - %s", i, iconName));
button->setStyleSheet("QPushButton{text-align : left;}");
// 将按钮添加到布局中
layout->addWidget(button, i / colNum, i % colNum);
}

this->setLayout(layout);

this->setWindowTitle("Qt 内置图标");

我使用的是macOS系统,Qt版本为5.15,一共有79个图标,效果如下:

在高分辨率屏幕上,图标可能显示模糊,此时可以加上这句代码:

1
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);

如何使用内置图标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 获取app的qstyle指针
QStyle *qstyle = QApplication::style();

// 按名字取图标
QStyle::StandardPixmap qtIcon = QStyle::SP_TitleBarMenuButton;

// 按索引号取图标
// QStyle::StandardPixmap qtIcon = (QStyle::StandardPixmap) 0;

// 创建一个图标
QIcon icon = qstyle->standardIcon(qtIcon);

// 把图标放到按钮上
QPushButton *iconBtn = new QPushButton;
iconBtn->setIcon(icon);

// 创建像素图
QPixmap pix = qstyle->standardPixmap(qtIcon);

// 把像素图放到Label上
QLabel *iconLable = new QLabel;
iconLable->setPixmap(pix);