更改按钮图标 SVG 颜色
Posted
技术标签:
【中文标题】更改按钮图标 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 可用。以上是关于更改按钮图标 SVG 颜色的主要内容,如果未能解决你的问题,请参考以下文章