charles_gz 发表于 2014-4-15 09:32:12

纯QML项目做开启动画方法

本帖最后由 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) 。这下大大方便了我的问题。下面是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的

QtAmao 发表于 2014-4-15 16:36:32

QPixmap pixmap("./download.jpg");你这个图片的路径在android上应该找不到吧,应该要用
QPixmap mypicture;
mypicture.load("qrc:图片路径");但是我不管怎么弄,程序运行都显示白屏,不知道哪里设置有问题。

QtAmao 发表于 2014-4-15 17:02:15

在桌面上可以运行,但是奇怪在android上就显示白屏

charles_gz 发表于 2014-4-28 16:29:15

QtAmao 发表于 2014-4-15 17:02 static/image/common/back.gif
在桌面上可以运行,但是奇怪在android上就显示白屏

你的是Qt哪个版本?
我当时写这篇文章的时候还没有拿到andriod设备所以没做测试,是我的错。我这出现的情况比你的更严重
createWindowContainer函数在QML中无法使用,经查阅网络上的文章好像这个是Qt目前存在的一个bug。

QtAmao 发表于 2014-4-29 08:45:50

charles_gz 发表于 2014-4-28 16:29 static/image/common/back.gif
你的是Qt哪个版本?
我当时写这篇文章的时候还没有拿到andriod设备所以没做测试,是我的错。我这出现的情 ...

我的Qt版本是Qt5.2.1。。。

charles_gz 发表于 2014-5-4 16:52:20

QtAmao 发表于 2014-4-29 08:45 static/image/common/back.gif
我的Qt版本是Qt5.2.1。。。

嗯,我的也是,我这在android设备上跑不起来,存在致命错误
页: [1]
查看完整版本: 纯QML项目做开启动画方法