教你做QT厘米秀
前言
去年寒假自学了qt,又刚好赶上过年,于是乎头脑发热,打算做一个烟花送给家人,也好装装逼,当时找不到一张背景透明的烟花GIF图,要么就得上淘宝画几十块买图,这我可接受不了,于是乎,我又学起了GIF抠图,可惜抠图技术不到家,说好的烟花图最后也只是扣了一个球。哈哈哈,是不是格局小了。直至今日,一个学期过去了,当我再次重操旧业时,发现qt我已经忘的差不多了,寒假的小作品我具体忘记怎么做了。呜呜呜。。。都是没做笔记,没做备份惹的祸。又得重新百度和学习了。痛定思痛,我就写下了这篇文章。话不多说,上视频。。。
小作品展示
寒假自己整的小作品
关键代码
包含以下必要的头文件
#include <QMovie>
#include <QMouseEvent>
#include <QMediaPlayer>
#include <QMediaPlaylist>
显示图片,其实就只是在widget.ui里边添加了label这么一个控件而已
QMovie * movie = new QMovie( ":/new/prefix1/as.gif" );
ui -> label -> setMovie(movie);
movie -> start();
实验效果如下
(厘米秀)步骤一
既然是厘米秀,那就不能有边框,背景也要透明,下面这两条代码就实现这个功能
this->setWindowFlags(Qt::FramelessWindowHint);//边框不可见
this->setAttribute(Qt::WA_TranslucentBackground);//背景变透明
再来看一下效果
(厘米秀)步骤二
可以看出边框不见了,背景色也透明了,但是图片它移动不了,那么接下来就该解决这个问题了。这里就要重写鼠标类的两个事件,一个是鼠标移动事件,一个是鼠标右击事件。我们通过鼠标左键来移动图片,通过右键点击来关闭显示窗口,不然每次都得从任务栏关闭,违反装逼到底的原则,看代码。。。
void Widget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::RightButton)
{
this->close();
}
if(event->button() == Qt::LeftButton)
{
cazhi=event->globalPos()-this->frameGeometry().topLeft();
}
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
// 下面注释掉的两行是什么用的?因为这样子可以方便大家做对比,可以看我提供的链接,里边老师解释的很清楚
// this->move(event->x(),event->y());
// this->move(event->globalX(),event->globalY());
this->move(event->globalPos()-cazhi);
}
好了,再来看一下效果
(厘米秀)步骤三
现在图片显示出来了,也能够移动了,但是,这还不够,我们要给它注入灵魂,那就是音乐,嗯。
//单曲播放
player = new QMediaPlayer;
//player>setMedia(QUrl::fromLocalFile("C:/Users/Administrator/Desktop/QT_Centimeter_show/untitled/aaa.mp3"));
player->setMedia(QUrl::fromLocalFile(".\\aaa.mp3"));
// player->setMedia(QUrl::fromLocalFile("C:\\Users\\Administrator\\Desktop\\linux_part\\aaa.mp3"));
player->setVolume(30);
player->play();
这里边大家可以用绝对路径和相对路径,如果是自己实验的话可以是绝对路径,如果后面打包发给被人或者打包成软件建议用相对路径,相对路径的当前路径是在build-untitled-Desktop_Qt_5_11_1_MinGW_32bit-Debug这么一个文件夹下面,把音频文件放在这个文件夹里边,相对路径就写“./xxx.mp3”.
最终效果演示:
(厘米秀)步骤四
GIF抠图
这个是我自己拍的视频,有一些坑,寒假踩过这回又踩一遍,把操作流程做成视频,以后就不怕忘记了,视频还有一首歌的时间,我就把后面一节发不出来了,有需要的小伙伴可以下载我上传的资料包,包括之前扣好的好几张背景透明的GIF,源码和完整视频,在制作的过程有什么问题大家也可以跟我说,一起进步。
截图教程_2