找回密码
 立即注册
收起左侧

纯QML项目做开启动画方法

5
回复
11691
查看
[复制链接]
累计签到:63 天
连续签到:1 天
来源: 原创 2014-4-15 09:32:12 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 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的
回复

使用道具 举报

累计签到:17 天
连续签到:1 天
2014-4-15 16:36:32 显示全部楼层
QPixmap pixmap("./download.jpg");  你这个图片的路径在android上应该找不到吧,应该要用
  QPixmap mypicture;
  mypicture.load("qrc:图片路径");但是我不管怎么弄,程序运行都显示白屏,不知道哪里设置有问题。
回复 支持 反对

使用道具 举报

累计签到:17 天
连续签到:1 天
2014-4-15 17:02:15 显示全部楼层
在桌面上可以运行,但是奇怪在android上就显示白屏
回复 支持 反对

使用道具 举报

累计签到:63 天
连续签到:1 天
2014-4-28 16:29:15 显示全部楼层
QtAmao 发表于 2014-4-15 17:02
在桌面上可以运行,但是奇怪在android上就显示白屏

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

使用道具 举报

累计签到:17 天
连续签到:1 天
2014-4-29 08:45:50 显示全部楼层
charles_gz 发表于 2014-4-28 16:29
你的是Qt哪个版本?
我当时写这篇文章的时候还没有拿到andriod设备所以没做测试,是我的错。我这出现的情 ...

我的Qt版本是Qt5.2.1。。。
回复 支持 反对

使用道具 举报

累计签到:63 天
连续签到:1 天
2014-5-4 16:52:20 显示全部楼层
QtAmao 发表于 2014-4-29 08:45
我的Qt版本是Qt5.2.1。。。

嗯,我的也是,我这在android设备上跑不起来,存在致命错误
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了