DtkGui
DTK Gui module
载入中...
搜索中...
未找到
Dtk::Gui::DDciIcon类 参考

#include <ddciicon.h>

Public 类型

enum  Mode { Normal = 0 , Disabled = 1 , Hover = 2 , Pressed = 3 }
 DCI图标模式 更多...
 
enum  Theme { Light = 0 , Dark = 1 }
 DCI图标主题 更多...
 
enum  IconAttibute { HasPalette = 0x001 }
 DCI图标属性 更多...
 
enum  IconMatchedFlag { None = 0 , DontFallbackMode = 0x01 , RegardPaddingsAsSize = 0x02 }
 DCI图标匹配参数 更多...
 

Public 成员函数

 Q_FLAGS (IconMatchedFlags)
 
 DDciIcon ()
 构造函数
 
 DDciIcon (const DCORE_NAMESPACE::DDciFile *dciFile)
 指定DCI文件的构造函数
 
 DDciIcon (const QString &fileName)
 
 DDciIcon (const QByteArray &data)
 指定DCI文件数据的构造函数
 
 DDciIcon (const DDciIcon &other)
 拷贝构造函数,重载赋值运算符
 
DDciIconoperator= (const DDciIcon &other) noexcept
 
 DDciIcon (DDciIcon &&other) noexcept
 
DDciIconoperator= (DDciIcon &&other) noexcept
 
void swap (DDciIcon &other) noexcept
 交换两个DDciIcon对象
 
bool isNull () const
 判断DCI图标是否为空
 
DDciIconMatchResult matchIcon (int size, Theme theme, Mode mode, IconMatchedFlags flags=None) const
 获取DCI图标匹配元信息, 元信息仅能作为传入参数使用
 
int actualSize (DDciIconMatchResult result) const
 获取DCI图标实际大小
 
int actualSize (int size, Theme theme, Mode mode=Normal) const
 获取DCI图标实际大小
 
QList< int > availableSizes (Theme theme, Mode mode=Normal) const
 获取DCI图标可用大小列表
 
bool isSupportedAttribute (DDciIconMatchResult result, IconAttibute attr) const
 
QPixmap pixmap (qreal devicePixelRatio, int iconSize, Theme theme, Mode mode=Normal, const DDciIconPalette &palette=DDciIconPalette()) const
 获取DCI图标的QPixmap
 
QPixmap pixmap (qreal devicePixelRatio, int iconSize, DDciIconMatchResult result, const DDciIconPalette &palette=DDciIconPalette()) const
 获取DCI图标的QPixmap
 
void paint (QPainter *painter, const QRect &rect, qreal devicePixelRatio, Theme theme, Mode mode=Normal, Qt::Alignment alignment=Qt::AlignCenter, const DDciIconPalette &palette=DDciIconPalette()) const
 绘制DCI图标
 
void paint (QPainter *painter, const QRect &rect, qreal devicePixelRatio, DDciIconMatchResult result, Qt::Alignment alignment=Qt::AlignCenter, const DDciIconPalette &palette=DDciIconPalette()) const
 绘制DCI图标
 
DDciIconImage image (DDciIconMatchResult result, int size, qreal devicePixelRatio) const
 

静态 Public 成员函数

static bool isSupportedAttribute (const DDciIconImage &image, IconAttibute attr)
 
static DDciIcon fromTheme (const QString &name)
 从dci图标主题(包括内置dci图标资源)中获取图标名字为name的图标
 
static DDciIcon fromTheme (const QString &name, const DDciIcon &fallback)
 从dci图标主题(包括内置dci图标资源)中获取图标名字为name的图标
 

友元

QDataStream & operator<< (QDataStream &, const DDciIcon &)
 
QDataStream & operator>> (QDataStream &, DDciIcon &)
 

详细描述

如果需要详细dci相关介绍以及规范文档, 可以参见dci文件图标规范

DDciIcon示例

项目目录结构在同一目录下

CMakeLists.txt

cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
project(ddciicon-example VERSION 1.0.0 LANGUAGES CXX) # 指定项目名称, 版本, 语言 cxx就是c++
set(CMAKE_CXX_STANDARD 11) # 指定c++标准
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定c++标准要求,至少为11以上
set(CMAKE_AUTOMOC ON) # 支持qt moc
set(CMAKE_AUTORCC ON) # support qt resource file # 支持qt资源文件
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 支持 clangd
if (CMAKE_VERSION VERSION_LESS "3.7.0") # 如果cmake版本小于3.7.0
set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置包含当前目录
endif()
find_package(Qt5 REQUIRED COMPONENTS Core) # 寻找Qt5组件Core
find_package(Qt5 REQUIRED COMPONENTS Gui) # 寻找Qt5组件Core
find_package(Qt5 REQUIRED COMPONENTS Widgets) # 寻找Qt5组件Widgets
find_package(DtkCore REQUIRED) # 寻找Dtk组件Core
find_package(Dtk REQUIRED COMPONENTS Gui) # 寻找Dtk组件Gui
find_package(Dtk REQUIRED COMPONENTS Widget) # 寻找Dtk组件Widget
add_executable(${PROJECT_NAME} # 生成可执行文件
main.cpp
qml.qrc
)
target_link_libraries(${PROJECT_NAME} PRIVATE # 添加需要链接的共享库
Qt5::Core
Qt5::Gui
Qt5::Widgets
Dtk::Core
dtkgui
dtkwidget
)

main.cpp

#include <DApplication>
#include <DWidgetUtil>
#include <DIconButton>
#include <DDciIcon>
#include <QtDebug>
#include <QFormLayout>
#include <DMainWindow>
#include <QWidget>
#include <QLabel>
#include <QHBoxLayout>
DWIDGET_USE_NAMESPACE
int main(int argc, char *argv[])
{
DApplication a(argc, argv);
DMainWindow win;
QWidget w;
QFormLayout* layout = new QFormLayout(&w);
// fromTheme表示从图标主题中寻找资源。
DDciIcon dci = DDciIcon::fromTheme("select_indicator");
auto icon = dci.matchIcon(0, DDciIcon::Light, DDciIcon::Hover);
qDebug() << "DCI图标的实际大小" << dci.actualSize(icon);
// 定义一个函数,传入DIconButton,以及提示信息
auto addBtnRow = [&](DIconButton *iconBtn, const QString name){
iconBtn->setIconSize(QSize(32,32));
QHBoxLayout *hlayout = new QHBoxLayout();
hlayout->addWidget(iconBtn);
QLabel *btnLabel = new QLabel(name);
hlayout->addWidget(btnLabel);
return hlayout;
};
// 将DDciIcon传入DIconButton
DIconButton *iconBtn1 = new DIconButton(dci);
layout->addRow(addBtnRow(iconBtn1, "icon button"));
DIconButton *iconBtn2 = new DIconButton(dci);
iconBtn2->setDisabled(true);
layout->addRow(addBtnRow(iconBtn2, "disabled state"));
DIconButton *iconBtn3 = new DIconButton(dci);
iconBtn3->setDown(true);
layout->addRow(addBtnRow(iconBtn3, "pressed state"));
win.setCentralWidget(&w);
win.resize(200,100);
win.show();
Dtk::Widget::moveToCenter(&win);
return a.exec();
}
Definition ddciicon.h:68
static DDciIcon fromTheme(const QString &name)
从dci图标主题(包括内置dci图标资源)中获取图标名字为name的图标
Definition ddciicon.cpp:932
int actualSize(DDciIconMatchResult result) const
获取DCI图标实际大小
Definition ddciicon.cpp:822
DDciIconMatchResult matchIcon(int size, Theme theme, Mode mode, IconMatchedFlags flags=None) const
获取DCI图标匹配元信息, 元信息仅能作为传入参数使用
Definition ddciicon.cpp:817

qml.qrc

<RCC>
<qresource prefix="/dsg/built-in-icons">
<file>select_indicator.dci</file>
</qresource>
</RCC>

select_indicator.dci

下载dci-demo解压获取,这是个用qml编写的例子,使用DDciIcon更灵活 dci-demo

编译和运行程序

cmake -B build
cmake --build build
./build/ddciicon-example

程序运行效果如下:

成员枚举类型说明

◆ IconAttibute

DCI图标属性

HasPalette 0x001

这个属性为了获取dci图标的图层是否包含调色板颜色调整, 比如某一个图层的图片的需要用高亮色的填充就是 HasPalette, 这个高亮色还可以调整亮度饱和度rgba等参数

◆ IconMatchedFlag

DCI图标匹配参数

枚举值
None 

空,无含义

DontFallbackMode 

在查找图片资源时,如果指定的 mode 不存在,则禁止回退,直接当作查找不到处理

RegardPaddingsAsSize 

将图层中携带的 paddings 属性算作图层大小的一部分,这会影响图片匹配时的大小判断

◆ Mode

DCI图标模式

Normal 0
Disabled 1
Hover 2
Pressed 3

◆ Theme

DCI图标主题

Light 0
Dark 1

成员函数说明

◆ actualSize() [1/2]

int Dtk::Gui::DDciIcon::actualSize ( DDciIconMatchResult  result) const

获取DCI图标实际大小

参数
[in]resultDCI图标匹配结果

◆ actualSize() [2/2]

int Dtk::Gui::DDciIcon::actualSize ( int  size,
DDciIcon::Theme  theme,
DDciIcon::Mode  mode = Normal 
) const

获取DCI图标实际大小

该函数会根据传入的参数获取DCI图标匹配结果,然后调用actualSize(DDciIconMatchResult result)函数获取DCI图标实际大小

参见
DDciIcon::actualSize(DDciIconMatchResult result)

◆ availableSizes()

QList< int > Dtk::Gui::DDciIcon::availableSizes ( DDciIcon::Theme  theme,
DDciIcon::Mode  mode = Normal 
) const

获取DCI图标可用大小列表

参数
[in]theme图标主题
[in]mode图标模式,默认为Normal

◆ fromTheme() [1/2]

static DDciIcon Dtk::Gui::DDciIcon::fromTheme ( const QString &  name)
static

从dci图标主题(包括内置dci图标资源)中获取图标名字为name的图标

参数
[in]nameDCI图标名称

◆ fromTheme() [2/2]

static DDciIcon Dtk::Gui::DDciIcon::fromTheme ( const QString &  name,
const DDciIcon fallback 
)
static

从dci图标主题(包括内置dci图标资源)中获取图标名字为name的图标

参数
[in]nameDCI图标名称
[in]fallback当图标名为 name 的图标找不到时, fallback 到 fallback 的这个dci图标

◆ image()

Dtk::Gui::DDciIcon::image ( DDciIconMatchResult  result,
int  size,
qreal  devicePixelRatio 
) const

构造一个 DDciIconImage 对象

参数
[in]result匹配到的图片结果,将根据此匹配结果查找对应的图片数据。
[in]size期望获取到的图片大小,将根据此大小寻找最为接近的图片资源,当图片大小与传入的大小不一致时,将优先返回一个稍大的图片。
[in]devicePixelRatio期望获取到的图片的缩放比例,将根据其寻找最为接近的图片资源,当无法找到指定比例的图片时,将优先返回一个稍大比例的图片。
参见
DDciIcon::matchIcon

◆ matchIcon()

DDciIconMatchResult Dtk::Gui::DDciIcon::matchIcon ( int  size,
Theme  theme,
Mode  mode,
IconMatchedFlags  flags = None 
) const

获取DCI图标匹配元信息, 元信息仅能作为传入参数使用

参数
[in]size图标大小
[in]theme图标主题
[in]mode图标模式
[in]flags图标匹配标志

◆ paint() [1/2]

void Dtk::Gui::DDciIcon::paint ( QPainter *  painter,
const QRect &  rect,
qreal  devicePixelRatio,
DDciIconMatchResult  result,
Qt::Alignment  alignment = Qt::AlignCenter,
const DDciIconPalette palette = DDciIconPalette() 
) const

绘制DCI图标

参数
[in]painterQPainter对象
[in]rect绘制区域
[in]devicePixelRatio设备像素比
[in]resultDCI图标匹配结果
[in]alignment对齐方式, 默认为Qt::AlignCenter
[in]palette图标调色板, 默认为无(空)调色板

◆ paint() [2/2]

void Dtk::Gui::DDciIcon::paint ( QPainter *  painter,
const QRect &  rect,
qreal  devicePixelRatio,
DDciIcon::Theme  theme,
DDciIcon::Mode  mode = Normal,
Qt::Alignment  alignment = Qt::AlignCenter,
const DDciIconPalette palette = DDciIconPalette() 
) const

绘制DCI图标

参数
[in]painterQPainter对象
[in]rect绘制区域
[in]devicePixelRatio设备像素比
[in]theme图标主题
[in]mode图标模式, 默认为Normal
[in]alignment对齐方式, 默认为Qt::AlignCenter
[in]palette图标调色板, 默认为无(空)调色板

◆ pixmap() [1/2]

QPixmap Dtk::Gui::DDciIcon::pixmap ( qreal  devicePixelRatio,
int  iconSize,
DDciIconMatchResult  result,
const DDciIconPalette palette = DDciIconPalette() 
) const

获取DCI图标的QPixmap

参数
[in]devicePixelRatio设备像素比
[in]iconSize图标大小
[in]resultDCI图标匹配结果
[in]palette图标调色板, 默认为无(空)调色板

◆ pixmap() [2/2]

QPixmap Dtk::Gui::DDciIcon::pixmap ( qreal  devicePixelRatio,
int  iconSize,
DDciIcon::Theme  theme,
DDciIcon::Mode  mode = Normal,
const DDciIconPalette palette = DDciIconPalette() 
) const

获取DCI图标的QPixmap

参数
[in]devicePixelRatio设备像素比
[in]iconSize图标大小
[in]theme图标主题
[in]mode图标模式, 默认为Normal
[in]palette图标调色板,默认为无(空)调色板

该类的文档由以下文件生成: