[Qt-qml] Error with PropertyAction/SequentialAnimation/Timer

Mark Tucker mark.tucker at airborne.aero
Tue Dec 7 16:59:13 CET 2010


Hello,

I am trying to animate changing a string, by fading it out, changing it,
then fading it back in, but I'm having an issue with the way I am
populating the string, and I have no idea why. The following is an
example as simplified as I can get it that exhibits this error:

//ListIndexError.qml
import Qt 4.7
Rectangle {
	width: 200
	height: 200
	property int listIndex: 0
	ListModel {
		id: model
		ListElement{ dataString: "String 1" }
		ListElement{ dataString: "String 2" }
		ListElement{ dataString: "String 3" }
	}
	Text {
		id: textArea
		anchors.centerIn: parent
	}
	SequentialAnimation {
		id: textAnimation
		//alwaysRunToEnd: true
		NumberAnimation { target: textArea; property: "opacity";
to: 0; duration: 250 }
		PropertyAction { target: textArea; property: "text";
value: { /*console.log("In PropertyAction " + "listIndex: " + listIndex
+ " count: " + model.count);*/ model.get(listIndex).dataString } }
		NumberAnimation { target: textArea; property: "opacity";
to: 1; duration: 250 }
	}
	Timer {
		id: textTimer
		interval: 5000
		repeat: true
		running: true
		triggeredOnStart: true
		onTriggered: {
			listIndex++;
			if (listIndex >= model.count) {
				listIndex = 0;
			}
			//console.log("listIndex: " + listIndex + "
count: " + model.count)
			textAnimation.start();
		}
	}
}

I've commented out the two console.log entries above, which I am using
to try and figure out what is going on. Note that the behaviour observed
is the same with Qt 4.7.0 or 4.7.1.

The Timer fires every 5 seconds and in doing so increments the listIndex
property. It then checks to make sure that it is still valid by checking
it against model.count, if it's equal to or greater then that then it
resets it to 0. After that, still in the onTriggered handler, it then
starts the animation.

For some reason the PropertyAction is being called when listIndex is 3
and hence causes an error due to an undefined value. I'm failing to see
how it should ever be the case that listIndex should be 3 when the
PropertyAction does its thing though.

Am I missing something blatantly obvious here or is there a but in Qt
somewhere here?

Thanks


Mark Tucker







More information about the Qt-qml mailing list