QML orientation observer

From Qt Wiki
Revision as of 10:46, 24 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search

In one of my mobile QML applications, I need to know when the handset orientation changes. The runtime knows but it doesn't offer a signal to my code. Here is a QML hack that observes when orientation changes. It watches both height and width for changes. When they have both changed, it sets a boolean property to 'true'. This works on handsets because both height and width change when orientation changes. It probably won't work on a desktop because there it's easy to change one without the other.

/*<br /> Hack to observe changes in orientation from portrait to landscape in a Rectangle.

Observation: On handsets, both the width and the height of the<br /> Rectangle will change when orientation changes. There is no way to<br /> catch both changes at the same time, so we catch them individually<br /> and set corresponding bools so we can remember the events. When we<br /> observe that both flags are 'true', we determine the orientation<br /> and set both bools back to 'false'.<br />*/<br />property bool changeOfWidth: false<br />property bool changeOfHeight: false<br />property bool newOrientation: false

onWidthChanged: {changeOfWidth = true; newOrientation = (changeOfWidth &amp;&amp; changeOfHeight)}<br />onHeightChanged: {changeOfHeight = true; newOrientation = (changeOfWidth &amp;&amp; changeOfHeight)}

onNewOrientationChanged: {<br /> if (newOrientation) {<br /> changeOfWidth = false;<br /> changeOfHeight = false;

if (width &gt; height) {<br /> // landscape<br /> console.log(&quot;landscape&amp;quot;)<br /> } else {<br /> // portrait<br /> console.log(&quot;portrait&amp;quot;)<br /> }<br /> }<br />}