Udělal jsem QML tlačítko součásti a jsem použít součást s názvem ColorImage
pro ikonu. Poté, co hledal způsob, jak změnit barvy obrazu. Zjistil jsem, že Qt již podporu ColorOverlay
Vznášet se, jen jsem napsal v "color" v Qt Design Studio a ColorImage
vyskočila. Snažil jsem se najít dokumentaci, on-line, ale nemohl jsem nic najít. Nicméně, když jsem se rozhodl to zkusit, to prostě funguje jak jsem očekával:
To je relevantní kód z mých tlačítko:
contentItem: ColorImage {
id: buttonIcon
source: imageSource
fillMode: Image.PreserveAspectFit
height: parent.height
color: iconColor
anchors.fill: actionBarButton
anchors.margins: 4
}
Když hovered
státu, z tlačítka se stane true
to umožňuje následující stav:
State {
when: (hovered && !checked)
name: "hoveredNotChecked"
PropertyChanges {
target: buttonIcon
color: "white"
}
PropertyChanges {
target: buttonBackground
color: iconColor
}
},
což swapy ikonu a barvu pozadí na tlačítko.
To funguje v náhledu Qt Designer. Nicméně, když se snažím spustit z Pyside, řekne mi: ColorImage is not a type
a prostě selže načíst tlačítko.
Snažil jsem se najít dokumentaci o ColorImage
zjistit, možná je tam import chybí. Nicméně, nemohl jsem nic. Qt Designer je vnitřní pomoc není zase až nic tak dobře. To je jako, pokud tato složka neexistuje. Ale funguje to, a funguje to v Design Studio.
Zde je kompletní kód pro tlačítko:
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
}
To je, jak to vypadá v designer:
Může mi někdo pomoci zjistit, proč to stěžuje ColorImage
nejsem typ, když se snažím spustit?
Edit:
Dovoz v souboru výše:
import QtQuick 2.15
import QtQuick.Controls 2.15