Archived:Handle change in screen orientation in Qt
S60 5th Edition
Note: This article is error prone, and needs code change in the example to work properly in Qt 4.7 in Symbian
PLEASE NOTE that the code in the arcticle doesn't work properly in Qt 4.7 on Symbian. The issue is in the example code's ResizeEvent::GetScreenCoordinates() method. The GetScreenCoordinates uses QDesktopWidget::availableGeometry and QDesktopWidget::screenGeometry methods. These methods do not in all cases reflect current values during QWidget::resizeEvent 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.
If whole screen geometry 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.
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.
This snippet can be self-signed.
- Download and install the Qt SDK
//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.
Download Code Example
- File:QtResizeEvent.zip shows new screen size when user change screen mode. This example is tested on Nokia 5800 XpressMusic.