【Qt】通过QtCreator源码学习Qt(十一):Utils::Icon,根据不同主题、不同状态变换图标

版权声明:本文为博主原创文章,未经博主允许不得转载。 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});

猜你喜欢

转载自blog.csdn.net/u010168781/article/details/88581476