飞凌嵌入式
直播中

zealsoft

3年用户 689经验值
擅长:可编程逻辑,嵌入式技术
私信 关注
[技术]

【飞凌RK3568开发板试用体验】“饺子皮”动画

感谢“电子发烧友网”和飞凌嵌入式公司提供了本次OK3568开发板的评测机会。
现在卡塔尔世界杯正进入高潮,我也来蹭个热点,使用Qt展示一下世界杯吉祥物“饺子皮”的动画。Qt是完整的跨平台软件开发平台,实现了一套代码可以在所有操作系统、平台和屏幕类型上部署,从台式机、嵌入式系统到可穿戴设备、移动设备。有很多著名的软件都是基于Qt开发的,如腾讯会议PC版、Wireshark、VirtualBox等。本文以飞凌嵌入式的OK3568开发板为例介绍Qt的动画展示能力。有关Qt开发环境的安装请参考:https://bbs.elecfans.com/jishu_2319965_1_1.html
一、   使用QMovie类显示动画GIF
QMovie类用于显示没有声音的简单动画。在实际运用中,经常用来显示GIF格式的动画。通过将文件名称或QIODevice指针传递给QMovie的构造函数即可创建QMovie对象。
调用start()方法来开始动画展示。此后QMovie将进入运行状态,并发出started()和stateChanged()信号。当动画播放完成时,QMovie会发出finished()信号。如果在回放过程中出现任何错误(即图像文件损坏),QMovie将发出error()信号。
可以通过调用setSpeed()来控制动画播放的速度,它以原始速度的百分比作为参数。通过调用setPaused(true)来暂停电影。如果调用setPaused(false), QMovie将重新进入运行状态并再次开始动画。如果要停止电影,调用stop(),否则电影会一直播放。
使用QLabel的setMovie()显示GIF动画,注意根据GIF动画的大小设置QLabel的大小,确保动画完整显示。
动画GIF是在一个GIF文件中保存多帧图片,显示的时候让多帧图片按一定规律快速、连续播放运动的画面。在网上有很多有趣的动画GIF文件。我们是在下面的网站上找到所需要的世界杯吉祥物拉伊卜(La’eeb)的动画GIF文件:https://tenor.com/zh-CN/view/%D9%84%D8%B9%D9%91%D9%8A%D8%A8-laeeb-gif-25275526。这个网站上还有很多有趣的动画。
ten.png
从网上下载的动画GIF的背景色有的时候和整个程序的风格不一致,此时可以使用在线工具将其背景去除变成透明的GIF文件:https://onlinegiftools.com/create-transparent-gif
显示动画的Qt代码如下:
  1.     movie1 = new QMovie(this);

        movie1->setScaledSize(ui->label->size());

        movie1->setFileName(":/media/laeeblove.gif");

        ui->label->setMovie(movie1);

        ui->label->setAttribute( Qt::WA_TranslucentBackground,

  2. true );
































  3.     movie1->start();

二、   使用QPixmap类显示背景图片
Qt 提供了多个用于处理图像数据的类,其中QPixmap 是为在屏幕上显示图像而设计和优化的。我们用QPixmap 来显示作为背景的国旗。
使用如下的语句就可以实现图片加载,其中lblflag是我们建立的一个专门用来显示背景的QLabel对象,它在用于显示动画的label的下面。
  1.     img = new QPixmap(":/media/arg.png");

        ui->lblflag->setPixmap(*img);



为了让背景能够随着窗体的大小自动变化,我们重写了paintEvent事件。
  1. void MainWindow::paintEvent(QPaintEvent *event)

    {

        ui->label->resize(600, 600);

        ui->label->move(ui->centralwidget->width() - 700, ui->centralwidget->height() - 700);

        ui->label->setScaledContents(true);

        ui->lblflag->resize(ui->centralwidget->width(), ui->centralwidget->height());

        ui->lblflag->move(0, 0);

        ui->lblflag->setScaledContents(true);


































  2. }

三、   使用QMediaPlayer类播放背景音乐
QMediaPlayer是Qt提供的一个跨平台媒体播放器类。它没有自己解码库,而是对平台相关的播放器框架做了封装,提供了平台无关的API。在Windows下时,底层基于微软的DirectShow框架实现。在Linux下时,底层基于GStreamer框架实现。
下面的代码实现了播放此次世界杯球迷主题曲。
  1.     player = new QMediaPlayer;

        player->setMedia(QUrl("qrc:/media/TukohTaka.mp3"));

        player->setVolume(50); //0~100音量范围,默认是100

        player->play();


四、   资源文件的使用

Qt 资源系统是一个跨平台的资源机制,将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如下图所示,我们可以把前面提到的动画GIF、背景图和MP3文件都放置在资源文件中,就不用担心丢失这些文件了,只需要拷贝一个可执行文件到开发板就可以实现程序的正常显示。
qtresource.png
将资源嵌入程序后,在调用资源时路径的写法有点特殊,就像我们前面程序所使用的“:/”或”qrc:/“。
五、   测试结果

现在的视频就是测试结果,为冬季的世界杯增加一些小乐趣。

饺子皮

更多回帖

发帖
×
20
完善资料,
赚取积分