Хорошо, так, как я вижу, у вас есть два основных варианта ..
1) Используйте SequentialAnimation , которая затухает в первом представлении, загружается во втором, а затем затухаетс чем-то вроде ..
SequentialAnimation {
id: switchContentAnimation
//Fade out first view
NumberAnimation {
target: contentLoader
property: "opacity"
duration: 1000
from: 0
to: 1
}
//Switch view
ScriptAction { script: contentLoader.setSource("Second.qml"); }
//Fade new view back in
NumberAnimation {
target: contentLoader
property: "opacity"
duration: 1000
from: 0
to: 1
}
}
Этот метод приведет к тому, что область будет пустой в течение доли секунды.Принимая во внимание, что вторым вариантом будет ..
2) Перекрестное затухание, добавив второй Loader, а затем, когда вы выберете кнопку, вы добавите к прозрачности непрозрачность.Это может выглядеть примерно так: *
property bool activeView: false //false: first, true: second
Loader{
id:contentLoaderOne
source: "First.qml"
onOpacityChanged: {
if(opacity == 0) {
//unload this loaders source to save memory
}
}
}
Loader{
id:contentLoaderTwo
onOpacityChanged: {
if(opacity == 0) {
//unload this loaders source to save memory
}
}
}
ParallelAnimation {
id: switchContentAnimation
NumberAnimation {
target: contentLoaderOne
properties: "opacity"
duration: 1000
to: (activeView) ? 1 : 0
}
NumberAnimation {
target: contentLoaderTwo
properties: "opacity"
duration: 1000
to: (!activeView) ? 1 : 0
}
}
//button click
Button{
text:modelData
width:100
height: parent.height
onClicked: {
if(activeView) {
//switch to second view..
contentLoaderTwo.setSource("Second.qml")
}
else {
//switch back to first view..
contentLoaderOne.setSource("First.qml")
}
activeView = !activeView;
switchContentAnimation.start()
}
}
В этом могут быть ошибки, поскольку вы не можете запустить код прямо сейчас!