如何在QML應用中實現一個Splash畫面,qml應用splash畫面

來源:互聯網
上載者:User

如何在QML應用中實現一個Splash畫面,qml應用splash畫面

在QML應用中,我們經常要用到一個SplashScreen的畫面來渲染我們的應用。那麼我們怎麼在自己的應用中做一個Splash Screen呢?


首先我們來設計一個自己的SplashScreen的QML模組:


SplashScreen.qml
import QtQuick 2.0Item {    id: splash    anchors.fill: parent    property int timeoutInterval: 2000    signal timeout    Image {        id: splashImage        anchors.fill: parent        source: "images/splash.jpg"    }    Timer {        interval: timeoutInterval; running: true; repeat: false        onTriggered: {            visible = false            splash.timeout()        }    }}


這裡的設計非常簡單。我們使用了一個圖片來顯示自己的畫面。同時,我們使用了一個Timer。當Timer timeout時,我們就發生一個訊號。這個訊號,可以被外界所使用。這也是好一個好的方法讓我們的模組和別的模組之間有一個好的隔離。我們可以在其它的模組中利用這個timout訊號來實現我們想要做的事情。
Main.qml
在這個模組中,我們直接使用SplashScreen.qml:
import QtQuick 2.0import Ubuntu.Components 1.1/*!    \brief MainView with a Label and Button elements.*/MainView {    // objectName for functional testing purposes (autopilot-qt5)    objectName: "mainView"    // Note! applicationName needs to match the "name" field of the click manifest    applicationName: "splashscreen.liu-xiao-guo"    /*     This property enables the application to change orientation     when the device is rotated. The default is false.    */    //automaticOrientation: true    // Removes the old toolbar and enables new features of the new header.    useDeprecatedToolbar: false    width: units.gu(60)    height: units.gu(85)    Page {        title: i18n.tr("Splashscreen")        MainWindow {            id: mainwindow            anchors.fill: parent            visible: false        }        SplashScreen {            onTimeout: {                console.log("it times out!");                mainwindow.visible = true;            }        }    }}

在SplashScreen中,我們捕獲timeout訊號,並使得MainWindow顯現。當然我們也可以實現自己的一些特效。這樣我們就可以實現我們想要的功能。
    

整個項目的源碼在:git clone https://gitcafe.com/ubuntu/splashscreen.git
對於Qt C++比較熟悉的開發人員來說,我們也可以使用如下的例子來完成相應的功能。我們可以使用“QtQuick App with QML UI (qmake)”模版。
SplashScreen.qml
import QtQuick 2.0import Ubuntu.Components 1.1MainView {    id: mainView    // objectName for functional testing purposes (autopilot-qt5)    objectName: "mainView"    // Note! applicationName needs to match the "name" field of the click manifest    applicationName: "splashscreenqt.liu-xiao-guo"    width: units.gu(60)    height: units.gu(85)    property int timeoutInterval: 2000    signal timeout    Page {        title: i18n.tr("")        Image {            id: splashImage            anchors.fill: parent            source: "images/splash.jpg"        }    }}


這裡,我們使用了一個空的title,這樣可以覆蓋所有的頁面。在main.cpp中,我們加入了一些新的代碼:
main.cpp
#include <QGuiApplication>#include <QQmlApplicationEngine>#include <QQuickView>#include <QElapsedTimer>int main(int argc, char *argv[]){    QGuiApplication app(argc, argv);    QQuickView view;    view.setResizeMode(QQuickView::SizeRootObjectToView);    view.setSource(QUrl(QStringLiteral("qrc:///SplashScreen.qml")));    view.show();    QElapsedTimer t;    t.start();    while(t.elapsed()<2000)    {        QCoreApplication::processEvents();    }    view.setSource(QUrl(QStringLiteral("qrc:///Main.qml")));    view.show();    return app.exec();}
   
整個項目的源碼在: git clone https://gitcafe.com/ubuntu/splashscreenqt.git



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.