|
本帖最后由 charles_gz 于 2014-4-28 16:30 编辑
目前在用纯QML做项目,由于移植到Android后开启比较慢,所以想给其添加一个开启动画。如果用QWidget做顶层显示控件的话,在main函数中用QSplashScreen就可以很容易的实现开启动画(QSplashScreen的帮助文档有demo)。但是目前用的是QQuickView来显示所以QSplashScreen便不能直接使用。
尝试了“瘦身”main.qml没达到效果,也可能是我方法不对,后来经过查看齐亮大神的一篇博文发现Qt5的QWidget提供了一个静态的方法:QWidget * QWidget::createWindowContainer(QWindow *window, QWidget * parent = 0, Qt::WindowFlagsflags = 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();(不知道这样是否妥当)。
在此做下记录,同时也给遇到同样问题的朋友点提示。当然如果有更好的办法还望不吝指教。
由于当时没有android设备所以无法测试,现在发现在android端使用createWindowContainer函数是存在bug的 |
|