Eu já o resolvi bem o suficiente para meus propósitos agora. A solução foi usar dois UbuntuImage
s. Eu fiz isso em um componente reutilizável:
import QtQuick 2.0
import Ubuntu.Components 0.1
Item {
id: root
state: "ubuntu"
property alias source : img.source
property alias alt_source : img2.source
/* Signals to connect through. See onCompleted of mouseArea for an example */
signal clicked
function swapImage() {
state = state == "one" ? "two" : "one"
}
MouseArea {
id: mouseArea
anchors.fill: parent
Component.onCompleted: {
mouseArea.clicked.connect(root.clicked)
}
}
UbuntuShape {
id: shape
anchors.fill: parent
image: Image {
id: img
fillMode: Image.PreserveAspectCrop
}
}
UbuntuShape {
id: shape2
anchors.fill: shape
opacity: 0
image: Image {
id: img2
fillMode: Image.PreserveAspectCrop
}
}
states: [
State {
name: "one"
PropertyChanges {
target: shape2
opacity: 1
}
PropertyChanges {
target: shape
opacity: 0
}
},
State {
name: "two"
PropertyChanges {
target: shape
opacity: 1
}
PropertyChanges {
target: shape2
opacity: 0
}
}
]
transitions: Transition {
NumberAnimation {
properties: "opacity"
duration: 1000
easing.type: Easing.InOutQuad
}
}
}
Eu coloco isso em um arquivo chamado UbuntuShape.qml
e depois o uso de outro arquivo como este
import QtQuick 2.0
import Ubuntu.Components 0.1
MainView {
width: units.gu(100)
height: units.gu(75)
Page {
title : "Erm"
UbuntuSwappableImage {
anchors.fill: parent
anchors.margins: units.gu(10)
source: "http://design.ubuntu.com/wp-content/uploads/ubuntu-logo14.png"
alt_source: "http://design.ubuntu.com/wp-content/uploads/canonical-logo1.png"
onClicked: swapImage()
}
}
}
Eu imagino que isso deve fornecer mais ganchos para os chamadores mudarem de material, mas é Good Enough ™ para mim por enquanto.