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取代:
我制作了一个 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取代: