使用filter替换svg图标颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用filter替换svg图标颜色相关的知识,希望对你有一定的参考价值。

参考技术A 有些svg图标不好修改颜色,所以利用filter属性的drop-shadow利用阴影替换原来的svg,水平位移的长度等于阴影的水平位移长度,纵向位移和模糊都设置为0,再填上想要的颜色就行了,

或者到阿里图标库 设置去色,就可以通过color修改。

更改按钮图标 SVG 颜色

【中文标题】更改按钮图标 SVG 颜色【英文标题】:Change Button Icon SVG Color 【发布时间】:2021-06-21 15:50:24 【问题描述】:

我有几个问题。我正在尝试创建一个自定义按钮,该按钮显示一个图标供用户单击。源图像是 svg。

    虽然我已经看到自定义按钮最常见的方法是使用 ColorOverlay,但我无法做到这一点,因为根据 link,QtGraphicalEffects 似乎不是 Qt6 的一部分,因此我无法使用颜色叠加。我正在使用 Python 和 Pyside6 构建我的应用程序。

    我也尝试使用 Button.qml 组件来实例化一个按钮,但我无法获得正确的搜索路径,因为它会从与 Button.qml 相同的目录中查找我的源图标图像,我确实这样做了不知道如何改变它的搜索目录。

    理想情况下,我希望能够使用 qrc 文件加载源图像,但我还没有找到在 QML 而不是 Python 中使用加载到 qrc 文件中的图像的方法。

这是我的代码中的一个 sn-p,其中包含我尝试制作的自定义按钮:

Rectangle
     width: 25
     height: 25
     color: "#00000000"
     Image
        width: 24
        height: 24
        source: "random.svg"
      

      MouseArea

      

 

带有QT的Button组件的Button:

Button
    width: 25
    height: 25
    display: AbstractButton.IconOnly
    icon.source: "random.svg"

【问题讨论】:

【参考方案1】:

对于问题 1

Qt6.1 包含 QtGraphicalEffects。

问题二

假设项目结构是这样的

-- project
  -- main.qml
  -- customs
     -- Button.qml
     -- icons
         -- random.svg

在你的 main.qml 中导入一个命名空间下的 Button.qml。假设是 Cust(它必须以大写字母开头)。

// main.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
import "./customs" as Cust

Cust.Button 

这一次你 100% 确定,你的会被加载。现在在您的自定义 Button.qml 中添加源,您说它是相对于它的

// Button.qml
Rectangle 
    ...
    source: "./icons/random.svg"

如果自定义 Button.qml 代码本身与 main.qml 无关,例如 Button.qml 与 main.qml 不在同一文件夹中。您应该将该文件夹添加到 QML2_IMPORT_PATH 环境变量以便能够导入它

例如。 /path/to/customs

您还需要该文件夹中的 qmldir 文件才能使其工作

// qmldir
module myCustomModule
Buttom 1.0 Button.qml

-- customs
   -- qmldir
   -- Button.qml

然后就可以在main.qml中导入为

// main.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
import myCustomModule as Cust

Cust.Button 

如果你没有把你的也叫做 Button.qml 而你把它叫做 MyButton.qml,你可以这样做

// main.qml
import myCustomModule

MyButton 

这意味着你还必须在你的 qmldir 中声明 MyButton

问题 3

您可以在 QML 文件中使用 qrc 作为

source: "qrc:///random.svg"

这是严格的,而在 python 中你也可以这样做:

":/random.svg"

【讨论】:

嗨。所以解决你的第二个答案,我的 Button.qml 文件与图标文件夹位于同一目录中,但如果不是因为我的搜索路径完全关闭,我改变你的路径并不是什么大问题.我在一个虚拟环境中运行,所以显然程序正在进入安装在 Qt 的 Button.qml 所在的 QtQuick 包中,并在那里搜索图像。您的其他答案工作正常;这只是为了快速测试,如果可能的话,我希望选项 2 可用。

以上是关于使用filter替换svg图标颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSS(jQuery SVG 图像替换)更改 SVG 图像的颜色?

如何使用 CSS(jQuery SVG 图像替换)更改 SVG 图像的颜色?

SVG 对象从外部 CSS 更改颜色

更改按钮图标 SVG 颜色

如何更改 vuejs 食谱中可编辑 Svg 图标系统中图标的颜色?

多种颜色的svg 怎么生成图标