charles_gz的个人主页

http://www.qtcn.org/bbs/u/111062  [收藏] [复制]

charles_gz

  • 4

    关注

  • 3

    粉丝

  • 17

    访客

  • 等级:新手上路
  • 总积分:92
  • 男,1987-03-04

最后登录:2016-06-13

更多资料

日志

QML项目实现开启动画

2014-04-15 09:37

  目前在用纯QML做项目,由于移植到Android后开启比较慢,所以想给其添加一个开启动画。如果用QWidget做顶层显示控件的话,在main函数中用QSplashScreen就可以很容易的实现开启动画(QSplashScreen的帮助文档有demo)。但是目前用的是QQuickView来显示所以QSplashScreen便不能直接使用。
        尝试了“瘦身”main.qml没达到效果,也可能是我方法不对,后来经过查看齐亮大神的一篇博文发现Qt5的QWidget提供了一个静态的方法:QWidget * QWidget::createWindowContainer( *window, QWidget * parent = 0, flags = 0) [static]。这下大大方便了我的问题。下面是main函数代码:
       int main(int argc, char *argv[])

    QApplication app(argc,argv);
    QPixmap pixmap("./download.jpg");
    QSplashScreen splash(pixmap);
    splash.show();
    app.processEvents();
    QtQuick2ApplicationViewer viewer;

        QWidget *mainWidget = QWidget::createWindowContainer(&viewer);


        QQmlEngine *engine = viewer.engine();    QQmlContext *context = engine->rootContext();
    context->setContextProperty("Myapp",&app);
    viewer.setSource(QUrl("qrc:/qml/mainView/main.qml"));
    mainWidget->showMaximized();
    splash.finish(mainWidget);
    return app.exec();
}
通过这么一弄就可以实现开启动画了,不过这么弄有一个问题就是如果退出功能在QML端的话使用之前的Qt.quit();就不起作用了。我的解决办法是把app暴漏给QML使之直接可以调用Myapp.quit();(不知道这样是否妥当)。
在此做下记录,同时也给遇到同样问题的朋友点提示。当然如果有更好的办法还望不吝指教。
分类:QML|回复:2|浏览:1165|全站可见|转载
 

下一篇:

上一篇: QT 改变QProgressBar颜色

 
删除

toby520:很好,遇到问题能及时记录,以后便于查看

2014-04-15 10:22 -

charles_gz:不过createWindowContainer函数目前在android设备上还存在问题,从网上查看好像是Qt存在的bug

2014-04-24 09:11

Powered by phpwind v8.7 Certificate Copyright Time now is:05-07 17:32
©2005-2016 QTCN开发网 版权所有 Gzip disabled