As I received Nokia N9 Dev kit from Qt Ambassador program, I started working on porting my existing Maemo 5 application to Maemo 6 (Harmattan/Meego) platform.
It seems from documentation that preferred way to create Meego application is by using QML and com.meego components. In order to make my Qt and QML application to work correctly on meego I needed to make quite a few changes.
First thing I noticed is that, Qt Widget are available on harmattan but that just for backword compatiblity and dose not provide native look and feel for Harmattan platform. That mean Qt Widget library are kind of useless on harmattan. We need to use meego touch library or meego QML component.
Some of my application were QWidget based or some were Graphics View based. I ported most of application to use QML and If i can not port to use QML then I used QDeclarativeItem to load that component to QML.
For some of my application I was locking orientation, using "WA_Maemo5PortraitOrientation" flag in view.setAttribute(Qt::WA_Maemo5PortraitOrientation, true); API call, But on Harmattan I need to use following code in QML page.
But after GraphicsView loaded to QML, view was displaying some white area that initially I was not able to remove. After a white I realized it was frame for graphics view. I removed it by using setFrameStyle API.
That's all, most of my experience was smooth while porting and did not struggled much.
It seems from documentation that preferred way to create Meego application is by using QML and com.meego components. In order to make my Qt and QML application to work correctly on meego I needed to make quite a few changes.
First thing I noticed is that, Qt Widget are available on harmattan but that just for backword compatiblity and dose not provide native look and feel for Harmattan platform. That mean Qt Widget library are kind of useless on harmattan. We need to use meego touch library or meego QML component.
Some of my application were QWidget based or some were Graphics View based. I ported most of application to use QML and If i can not port to use QML then I used QDeclarativeItem to load that component to QML.
For some of my application I was locking orientation, using "WA_Maemo5PortraitOrientation" flag in view.setAttribute(Qt::WA_Maemo5PortraitOrientation, true); API call, But on Harmattan I need to use following code in QML page.
Page{ orientationLock: PageOrientation.LockPortrait }To make application full screen, I need to disable statusbar and toolbar from PageStackWindow. I used following code
PageStackWindow { showStatusBar: false showToolBar: false }In one of my application I was using GraphicsView framework, I loaded graphics view to QML using QDeclarativeItem and QGraphicsProxyWidget. Visit following link for more info.
But after GraphicsView loaded to QML, view was displaying some white area that initially I was not able to remove. After a white I realized it was frame for graphics view. I removed it by using setFrameStyle API.
setFrameStyle(QFrame::NoFrame);Desktop file also needs to be changed to locate icon correctly and to launch only single instance of application.
[Desktop Entry] Encoding=UTF-8 Version=0.1 Name=appname GenericName=app name Comment=some comment Exec=/usr/bin/single-instance /usr/bin/appname Terminal=false Type=Application Icon=/usr/share/icons/hicolor/64x64/apps/icon.pngAlso in control file, to make your application user application and not system component, we need to add following flag.
Maemo-Flags: visibleI used following in my project file to transfer icon file to proper location.
unix { #VARIABLES isEmpty(PREFIX) { PREFIX = /usr } BINDIR = $$PREFIX/bin DATADIR =$$PREFIX/share DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\" INSTALLS += target desktop icon64 target.path =$$BINDIR desktop.path = $$DATADIR/applications desktop.files += ./image/$${TARGET}.desktop icon64.path = /usr/share/icons/hicolor/64x64/apps/ icon64.files += ./image/$${TARGET}.png }I also faced segmentation fault while testing Webview with emulator, but on device it works fine.
That's all, most of my experience was smooth while porting and did not struggled much.
Isnt the icon size for harmattan 80x80?
ReplyDeleteYes, icon size for harmattan is 80x80, but to avoid icon issue i placed, 80x80 icon to /usr/share/icons/hicolor/64x64/apps/
ReplyDeleteHi, when I use the "showStatusBar: false" property i always get a random peice of the status bar with the battery and wifi indicator still shown in the top left hadn corner of the screen, did this happen for you too??
ReplyDeleteNo, I did not face such problem when I use "showStatusBar: false", might be upgrading firmware solve the problem ?
ReplyDeleteHow did you upgrade the FW on the N950 :S I'm using the one the device came with v1.20011.22-6
ReplyDeletethis link might help, though I have not tried flashing image my self.
ReplyDeletehttp://wiki.meego.com/ARM/N950