QML Splash Screen Not Working
-
My app used to work before the latest belle update but doesnt anymore. The splash screen only works when i downgrade com.nokia.symbian 1.1 to 1.0 on both the init.qml file and the splashcreen.qml file but then doesnt display the main.qml file. When I instruct main.cpp to directly load main.qml the app does work.... Im lost! Here is the code I have for main.cpp:
@
#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));QmlApplicationViewer viewer; viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); viewer.setSource(QUrl("qrc:/qml/SmartFlyer/init.qml")); //viewer.setMainQmlFile(QLatin1String("qrc:qml/SmartFlyer/main.qml")); viewer.showExpanded(); return app->exec();
}
@For init.qml:
@
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
import com.nokia.symbian 1.1Item {
id: initSplashScreen { id: splash show: true // show splash minTimeout: 3000 // show splash at least for 3 sec image: "data/splash_screen.png" // path to splash image canFinish: false // change to true when main QML will be loaded z: 100 // highest page. } Loader { // this component performs deferred loading. id: mainLoader onStatusChanged: { if( mainLoader.status == Loader.Ready ) { // main page is loaded // time to hide splash splash.canFinish = true } } } Component.onCompleted: { // splash is already rendered on the screen // user is looking on splash // now we can start loader to load main page mainLoader.source = "main.qml" }
}
@And for splashscreen.qml :
@
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
import com.nokia.symbian 1.1Rectangle {
id: splashanchors.fill: parent color: "black" property int minTimeout: 3000 // 3s by default. property string image; // path to splash image property bool show: false // if show is true then image opacity is 1.0, else 0.0 property bool canFinish: false // if true then we can hide spash after timeout state: show ? "showingSplash" : "" onStateChanged: { if( state == "showingSplash" ) splashTimer.start(); } opacity: 0.0 Image { source: image fillMode: Image.PreserveAspectFit anchors.fill: parent smooth: true } Timer { id: splashTimer interval: minTimeout running: false repeat: true onTriggered: { if( splash.canFinish ) { // finally we can stop timer and hide splash splash.show = false splashTimer.repeat = false } else { // canFinish is false, but main.qml is not loaded yet // we should run timer again and again splashTimer.interval = 1000 // 1 sec splashTimer.repeat = true } } } states: [ State { name: "showingSplash" PropertyChanges { target: splash; opacity: 1.0 } } ] // hide splash using animation transitions: [ Transition { from: ""; to: "showingSplash" reversible: true PropertyAnimation { property: "opacity"; duration: 500; } } ]
}
@