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

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

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

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

  3. 理想情况下,我希望能够使用 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"
}

【问题讨论】:

    标签: qt qml pyside


    【解决方案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 可用。
    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多