Qt、QML、ColorImage 不是类型

Qt, QML, ColorImage is not a type

我制作了一个 QML 按钮组件,并为图标使用了一个名为 ColorImage 的组件。在寻找改变图像颜色的方法之后。我发现 Qt 不再支持 ColorOverlay

悬停,我刚刚在 Qt Design Studio 中输入 'color',ColorImage 弹出。我试图在网上查找文档,但找不到任何内容。然而,当我决定尝试它时,它就像我预期的那样工作:

这是我按钮中的相关代码:

    contentItem: ColorImage {
        id: buttonIcon
        source: imageSource
        fillMode: Image.PreserveAspectFit
        height: parent.height
        color: iconColor
        anchors.fill: actionBarButton
        anchors.margins: 4
    }

当按钮的 hovered 状态变为 true 时,它会启用以下状态:

State {
            when: (hovered && !checked)
            name: "hoveredNotChecked"
            PropertyChanges {
                target: buttonIcon
                color: "white"
            }

            PropertyChanges {
                target: buttonBackground
                color: iconColor
            }
        },

交换按钮上的图标和背景颜色。

这在 Qt Designer 的预览中有效。但是,当我尝试从 Pyside 运行 它时,它告诉我:ColorImage is not a type 并且无法加载按钮。

我试图找到关于 ColorImage 的文档,以弄清楚是否缺少导入。但是,我无法找到任何东西。 Qt Designer 的内部帮助也没有显示任何内容。就好像这个组件不存在一样。但确实如此,而且它在 Design Studio 中有效。

这是我的按钮的完整代码:

Button {
    id: actionBarButton

    property color iconColor: "red"
    property color backgroundColor: "blue"
    property string toolTipText: "Play video!"
    property string imageSource: "images/round_play_arrow_white_36dp.png"
    property string imageSourceChecked: "images/round_play_arrow_white_36dp.png"

    states: [
        State {
            when: (hovered && !checked)
            name: "hoveredNotChecked"
            PropertyChanges {
                target: buttonIcon
                color: "white"
            }

            PropertyChanges {
                target: buttonBackground
                color: iconColor
            }
        },
        State {
            when: (hovered && checked)
            name: "hoveredChecked"
            PropertyChanges {
                target: buttonIcon
                source: imageSourceChecked
                color: "white"
            }

            PropertyChanges {
                target: buttonBackground
                color: iconColor
            }
        },
        State {
            when: checked
            name: "checked"
            PropertyChanges {
                target: buttonIcon
                source: imageSourceChecked
            }
        }
    ]

    transitions: Transition {

        ColorAnimation {
            duration: 300
        }
    }

    contentItem: ColorImage {
        id: buttonIcon
        source: imageSource
        fillMode: Image.PreserveAspectFit
        height: parent.height
        color: iconColor
        anchors.fill: actionBarButton
        anchors.margins: 4
    }

    onHoveredChanged: {

    }
    background: Rectangle {
        id: buttonBackground
        color: backgroundColor
        anchors.fill: actionBarButton
    }

    ToolTip.delay: 1000
    ToolTip.timeout: 5000
    ToolTip.visible: hovered
    ToolTip.text: actionBarButton.toolTipText
}

这是它在设计器中的样子:

谁能帮我弄清楚为什么它在我尝试启动时抱怨 ColorImage不是类型?

编辑:

上面文件中的导入:

import QtQuick 2.15
import QtQuick.Controls 2.15

ColorImage 是 Qt 内部私有组件:

https://github.com/qt/qtdeclarative/blob/dev/src/quickcontrols2impl/qquickcolorimage.cpp

它似乎不支持非内部使用。

如果你真的想用,试试import QtQuick.Controls.impl 2.15

请注意,ColorOverlay 在 Qt5Compat 的 Qt 6.2 中再次可用:

https://doc.qt.io/qt-6/qml-qt5compat-graphicaleffects-coloroverlay.html

最终会被Qt Quick MultiEffect取代:

https://marketplace.qt.io/products/qt-quick-multieffect