[Development] Behaviour change of opacity property in QtQuick 2.0

Alan Alpert alan.alpert at nokia.com
Thu Jul 19 03:08:10 CEST 2012


On Wed, 18 Jul 2012 13:47:36 ext Nils Jeisecke wrote:
> Hi,
> 
> In QtQuick 1 an element with opacity == 0 is treated as invisible
> (e.g. it won't see mouse events).
> This has changed in QtQuick 2.0 which breaks existing code that
> assumes that opacity == 0 means !visible.
> 
> This example illustrates the change. A mouse click will print:
> QtQuick 1.1: "CLICKED A"
> QtQuick 2.0: "CLICKED B"
> 
> A workaround is to set "visible: opacity > 0"
> 
> Is this change intentional?

Yes, this was intentional. Opacity is now a purely visual property, and only 
visible is used for optimizations (such as not receiving input or being 
positioned). Sorry, this should have been listed in What's New; 
https://codereview.qt-project.org/31057 fixes this.

The reason, apart from better conceptual consistency, is that this makes 
opacity a lot easier to use and animate in some circumstances. Key edge cases 
involved wanting to fade something out but not actually lose the 'visible' 
behavior, such as collecting mouse events or being positioned by positioner 
elements. Previously the below snippet would have the green rectangle jerk 
around a lot because it was repositioned in the instant that opacity became 0 
for the blue rectangle, and again when it became non-zero.

Column {
	Rectangle { color: "red"; width: 40; height: 40}
	Rectangle 
	{ 
		color: "blue"; width: 40; height: 40
		SequentialAnimation on opacity {
			NumberAnimation{ from: 1; to: 0 }
			NumberAnimation{ from: 0; to: 1 }
		}
	}
	Rectangle { color: "green"; width: 40; height: 40}
}

You can imagine the analagous situation with a MouseArea, where its subtree is 
pulsing in opacity and if the user clicks at the wrong time then it 
inexplicably doesn't work.

--
Alan Alpert



More information about the Development mailing list