首页 > 其他 > 详细

QT实现桌面歌词的播放效果

时间:2020-03-02 12:20:40      阅读:214      评论:0      收藏:0      [点我收藏+]

思路:

自写一个类MyLrc,继承于QLabel,然后用线性渐变和绘图事件将歌词绘上去。

效果图:

技术分享图片

流程:

一、将MyLrc设置成窗口无边框、背景透明

//设置窗体                         无边框                       置顶
setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
setAttribute(Qt::WA_TranslucentBackground);        //背景透明

二、准备线性渐变

 1 //还没播的
 2     linearGradient.setStart(0, 10);
 3     linearGradient.setFinalStop(0, 40);
 4     linearGradient.setColorAt(0.1, QColor(14, 179, 255));
 5     linearGradient.setColorAt(0.5, QColor(114, 32, 255));
 6     linearGradient.setColorAt(0.9, QColor(14, 179, 255));
 7 
 8     //已经播过的
 9     maskLinearGradient.setStart(0, 10);
10     maskLinearGradient.setFinalStop(0, 40);
11     maskLinearGradient.setColorAt(0.1, QColor(222, 54, 4));
12     maskLinearGradient.setColorAt(0.5, QColor(255, 72, 16));
13     maskLinearGradient.setColorAt(0.9, QColor(222, 54, 4));

三、重写绘图事件

 1 //绘图事件
 2 void MyLrc::paintEvent(QPaintEvent *e)
 3 {
 4     QPainter painter(this);
 5     painter.setFont(myFont);  //如果绘图的画家指定字体的话,那么该类也应该设置字体,这样用adjustSize()函数后宽度和高度才是正确的
 6     //绘制底层黑色阴影图层
 7     painter.setPen(Qt::black);
 8     painter.drawText(1, 1, this->width(), this->height(), Qt::AlignLeft, text());
 9     //绘制未播放图层
10     painter.setPen(QPen(linearGradient, 0));
11     painter.drawText(0, 0, this->width(), this->height(), Qt::AlignLeft, text());
12     //绘制已播放图层
13     painter.setPen(QPen(maskLinearGradient, 0));
14     painter.drawText(0, 0, drawWidth, this->height(), Qt::AlignLeft, text());
15 }

四、重写鼠标事件,使得可以用鼠标进行移动歌词

 1 //鼠标点击事件
 2 void MyLrc::mousePressEvent(QMouseEvent *e)
 3 {
 4     if(e->button() == Qt::LeftButton)
 5     {
 6         movePointData.setX(e->pos().x());
 7         movePointData.setY(e->pos().y());
 8     }
 9 }
10 
11 //鼠标移动事件
12 void MyLrc::mouseMoveEvent(QMouseEvent *e)
13 {
14     if(e->buttons() & Qt::LeftButton)
15     {
16         this->move(e->globalPos() - movePointData);
17     }
18 }
19 
20 //鼠标松开事件    这个是保证歌词永远完整的在屏幕显示
21 void MyLrc::mouseReleaseEvent(QMouseEvent *e)
22 {
23     if(e->button() == Qt::LeftButton)
24     {
25         if(this->x() < 0)
26             this->setGeometry(0, this->y(), this->width(), this->height());
27         if(this->y() < 0)
28             this->setGeometry(this->x(), 0, this->width(), this->height());
29         if(this->x() + this->width() > QApplication::desktop()->screenGeometry().width())
30             this->setGeometry(QApplication::desktop()->screenGeometry().width() - this->width()
31                               , this->y(), this->width(), this->height());
32         if(this->y() + this->height() > QApplication::desktop()->screenGeometry().height())
33             this->setGeometry(this->x(), QApplication::desktop()->screenGeometry().height() - this->height(),
34                               this->width(), this->height());
35     }
36 }

五、字幕文本设置

1 //设置字幕文本
2 
3 myLrcShow->setText(myMediaPlayList->currentMedia().canonicalUrl().fileName());
4 //每次设置文本都要用adjustSize()函数来更改label的高度和宽度
5 myLrcShow->adjustSize();

 

QT实现桌面歌词的播放效果

原文:https://www.cnblogs.com/zswd-hwj/p/12394514.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!