版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010168781/article/details/88581476
1、简介
在QtCreator中Utils::Icon封装的图标可以根据主题变换,还可以设置不同状态下的图标的颜色。不同状态下的颜色变换,由QIcon::addPixmap函数实现:
void QIcon::addPixmap(const QPixmap &pixmap,
Mode mode = Normal, State state = Off)
2、源码分析
src/libs/utils/icon.h
//Utils::Icon依赖Utils::Theme主题,
//主题中定义了各个小部件的颜色,可以从主题配置文件中获取
typedef QPair<QString, Theme::Color> IconMaskAndColor;
// 定义一个重新着色的图标: 带阴影的、禁止状态的
class QTCREATOR_UTILS_EXPORT Icon : public QVector<IconMaskAndColor>
{
public:
enum IconStyleOption {
None = 0,
Tint = 1, //彩色
DropShadow = 2, //带阴影
PunchEdges = 4, //边缘透明
ToolBarStyle = Tint | DropShadow | PunchEdges, //工具栏
MenuTintedStyle = Tint | PunchEdges
};
Q_DECLARE_FLAGS(IconStyleOptions, IconStyleOption)
Icon();
//可以添加多张图片组合成一张:如:QtCreator中构建图标的锤子是由手柄和头两张图片组合而成
Icon(std::initializer_list<IconMaskAndColor> args, IconStyleOptions style = ToolBarStyle);
//通过文件名添加图标
Icon(const QString &imageFileName);
Icon(const Icon &other) = default;
//返回图标
QIcon icon() const;
// 与icon()相同,但没有禁用状态。
QPixmap pixmap() const;
// 尽量避免。它只是用于Qt Creator中的特殊API情况。
QString imageFileName() const;
// 如果主题中设置了Theme::FlatModeIcons标志则使用flat图标,否则使用classic。
static QIcon sideBarIcon(const Icon &classic, const Icon &flat);
// 和sideBarIcon类似: 为flat图标添加活动状态的图像 (QIcon result.addPixmap(flatActive.pixmap(), QIcon::Active);)
static QIcon modeIcon(const Icon &classic, const Icon &flat, const Icon &flatActive);
// 将多个Icon中的 QIcon::Disabled和QIcon::Normal 模式添加到一个QIcon中
static QIcon combinedIcon(const QList<QIcon> &icons);
private:
IconStyleOptions m_style = None;
};
3、使用方法
3.1创建
在图标头文件中创建,参见:src/plugins/projectexplorer/projectexplorericons.h
通过文件名创建:Icon(const QString &imageFileName);
const Utils::Icon BUILD(QLatin1String(":/projectexplorer/images/build.png"));
const Utils::Icon BUILD_SMALL(QLatin1String(":/projectexplorer/images/build_small.png"));
//添加多张图片组合成一张:如QtCreator中构建图标的锤子是由手柄和头两张图片组合而成
const Utils::Icon BUILD_FLAT({
{QLatin1String(":/projectexplorer/images/build_hammerhandle_mask.png"), Utils::Theme::IconsBuildHammerHandleColor},
{QLatin1String(":/projectexplorer/images/build_hammerhead_mask.png"), Utils::Theme::IconsBuildHammerHeadColor}});
3.2 使用
需要使用QIcon时,使用sideBar、combinedIcon等函数获取,参见:Iconsrc/plugins/projectexplorer/projectexplorer.cpp
const QIcon sideBarIcon = Utils::Icon::sideBarIcon(Icons::BUILD, Icons::BUILD_FLAT);
const QIcon buildIcon = Utils::Icon::combinedIcon({Icons::BUILD_SMALL.icon(), sideBarIcon});