日志
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();(不知道这样是否妥当)。 在此做下记录,同时也给遇到同样问题的朋友点提示。当然如果有更好的办法还望不吝指教。 |
下一篇: 无
上一篇: QT 改变QProgressBar颜色
charles_gz:不过createWindowContainer函数目前在android设备上还存在问题,从网上查看好像是Qt存在的bug
2014-04-24 09:11