感谢“
电子发烧友网”和飞凌嵌入式公司提供了本次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的大小,确保动画完整显示。
显示动画的Qt代码如下:
movie1 = new QMovie(this);
movie1->setScaledSize(ui->label->size());
movie1->setFileName(":/media/laeeblove.gif");
ui->label->setMovie(movie1);
ui->label->setAttribute( Qt::WA_TranslucentBackground,
- true );
movie1->start();
二、 使用QPixmap类显示背景图片
Qt 提供了多个用于处理图像数据的类,其中QPixmap 是为在屏幕上显示图像而设计和优化的。我们用QPixmap 来显示作为背景的国旗。
使用如下的语句就可以实现图片加载,其中lblflag是我们建立的一个专门用来显示背景的QLabel对象,它在用于显示动画的label的下面。
img = new QPixmap(":/media/arg.png");
ui->lblflag->setPixmap(*img);
为了让背景能够随着窗体的大小自动变化,我们重写了paintEvent事件。
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);
}
三、 使用QMediaPlayer类播放背景音乐
QMediaPlayer是Qt提供的一个跨平台媒体播放器类。它没有自己解码库,而是对平台相关的播放器框架做了封装,提供了平台无关的API。在Windows下时,底层基于微软的DirectShow框架实现。在Linux下时,底层基于GStreamer框架实现。
下面的代码实现了播放此次世界杯球迷主题曲。
player = new QMediaPlayer;
player->setMedia(QUrl("qrc:/media/TukohTaka.mp3"));
player->setVolume(50); //0~100音量范围,默认是100
player->play();
四、 资源文件的使用
Qt 资源系统是一个跨平台的资源机制,将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如下图所示,我们可以把前面提到的动画GIF、背景图和MP3文件都放置在资源文件中,就不用担心丢失这些文件了,只需要拷贝一个可执行文件到开发板就可以实现程序的正常显示。
将资源嵌入程序后,在调用资源时路径的写法有点特殊,就像我们前面程序所使用的“:/”或”qrc:/“。
五、 测试结果
现在的视频就是测试结果,为冬季的世界杯增加一些小乐趣。