Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries. Thanks for all your past and future contributions.

Archived:Handle change in screen orientation in Qt

From Wiki
Jump to: navigation, search

Archived.pngArchived: This article is archived because it is not considered relevant for third-party developers creating commercial solutions today. If you think this article is still relevant, let us know by adding the template {{ReviewForRemovalFromArchive|user=~~~~|write your reason here}}.

Qt Quick should be used for all UI development on mobile devices. The approach described in this article (based on QWidget) is deprecated.

This code example shows how to get notification when the screen mode changes using QWidget::resizeEvent(). This method gets called when the screen mode changes, so you have to implement that virtual method in your class in order to handle orientation change events.

Article Metadata
Code ExampleTested with
Devices(s): Nokia 5800 XpressMusic
Platform(s): S60 3rd Edition, FP1, FP2
S60 5th Edition
Platform Security
Signing Required: Self-Signed
Capabilities: None
Keywords: QWidget::resizeEvent()
Created: savaj (26 Jun 2009)
Last edited: hamishwillee (30 Apr 2013)

Warning.pngWarning: This article does not work properly in Qt 4.7 in Symbian. It can be rectified with the change described below.

The issue is in the example code's ResizeEvent::GetScreenCoordinates() method. The GetScreenCoordinates uses QDesktopWidget::availableGeometry and QDesktopWidget::screenGeometry methods. In all cases these methods do not reflect current screen geometry values during QWidget::resizeEvent call as the respective values are only changed after the resizeEvent has occured. This means that e.g. during the startup of the application these may return wrong values as the values are not yet set properly.

If the whole screen geometry information is needed from QDesktopWidget it's advised to connect to QApplication::desktop()'s workAreaResized(int) signal and call QApplication::desktop()->availableGeometry() in the connected slot function. This works in Qt 4.7.3 in Symbian but not (due to bug) in Qt 4.6.

See following bug report for more details. The QTBUG-14058's fix introduces documentation for QDesktopWidget on this issue.

In many cases application should however get simply the geometry of the main window using QMainWindow::width() and ::height() methods during QMainWindow's resizeEvent.



//resizeEvent() method get called when user change screen mode.
void ResizeEvent::resizeEvent (QResizeEvent* event)
QSize widgetSize = event->size();
//Resize your custom control according to new size.


The code snippet is expected to notify change in screen mode.

Normal screen


Screen after changing mode to portrait


Related link

Download Code Example

  • shows new screen size when user change screen mode. This example is tested on Nokia 5800 XpressMusic.

This page was last modified on 30 April 2013, at 05:38.
60 page views in the last 30 days.