QT音乐播放器⑩----“轮播图”跳转专辑/歌单详情、“热门歌单”跳转歌单详情、获取音频链接并播放

QT音乐播放器实现页面跳转与播放功能

简介:

基于QT5.12版本的Quick QML项目----恋羽音乐播放器(爆肝中......)

上一讲链接:https://blog.csdn.net/2301_80668528/article/details/152614244?fromshare=blogdetail&sharetype=blogdetail&sharerId=152614244&sharerefer=PC&sharesource=2301_80668528&sharefrom=from_link

                        
下一讲链接:https://blog.csdn.net/2301_80668528/article/details/153211622?fromshare=blogdetail&sharetype=blogdetail&sharerId=153211622&sharerefer=PC&sharesource=2301_80668528&sharefrom=from_link

ps:如有错误,欢迎指出^\/^

原视频出处:https://b23.tv/gFnMsLg

一、“轮播图”跳转专辑/歌单详情

专辑歌单页面为跳转页面,故需要另起一个.qml文件

1.新建专辑歌单对应的.qml文件

复制DetialHistoryPageView.qml文件,粘贴,重命名:“DetailPlayListPageView.qml

设置纵列布局,并修改对应文本内容:

2.编写页面上方的图片与文字的行布局

/* 页面上方行布局 */                                                                                                                                                    
RowLayout                                                                                                                                                        
{                                                                                                                                                                
    RowLayout                                                                                                                                                    
    {                                                                                                                                                            
        height: 140                                                                                                                                              
        width:parent.width                                                                                                                                       
                                                                                                                                                                 
        /* 图片 */                                                                                                                                                 
        MusicRoundImage                                                                                                                                          
        {                                                                                                                                                        
            id: playListCover                                                                                                                                    
            width: 130                                                                                                                                           
            height: 130  
            Layout.leftMargin: 15      //左边距                                                                                                                                      
            imgSrc: "https://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg"                                                                     
        }                                                                                                                                                        
                                                                                                                                                                 
        /* 文本内容 */                                                                                                                                               
        Item                                                                                                                                                     
        {                                                                                                                                                        
            Layout.fillWidth: true                                                                                                                               
            height:parent.height                                                                                                                                 
                                                                                                                                                                 
            Text                                                                                                                                                 
            {                                                                                                                                                    
                id: playListDesc                                                                                                                                 
                text: "https://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpghttps://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpghttps://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpghttps://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg"        //暂时先插入任意长文本

                width: parent.width * 0.95                                                                                                                              
                anchors.centerIn: parent        //居中                                                                                                             
                wrapMode: Text.WrapAnywhere     //自动换行                                                                                                           
                font.family: window.mFONT_FAMILY                                                                                                                 
                font.pointSize: 10                                                                                                                               
                maximumLineCount: 4                                                                                                                              
                elide: Text.ElideRight          //超出长度部分自动在最右侧用省略号代替                                                                                             
                lineHeight: 1.3                 //行距                                                                                                             
            }                                                                                                                                                    
        }                                                                                                                                                        
    }                                                                                                                                                            
}                                                                                                                                                                
                                                                                                                                                                 
/* 列表 */                                                                                                                                                         
 MusicListView                                                                                                                                                   
 {                                                                                                                                                               
     id: playListListView                                                                                                                                        
                                                                                                                                                                 
 }                                                                                                                                                               
                                                                                                                                                                 
                                                                                                                                                                                                                      

3.在PageHomeView注册列表进行注册

但是不能让专辑歌单加载到菜单里面,所以需要给这些组件设置属性menu的show属性:

在下方第137行“组件加载”中获取数据时,用过滤器来过滤掉DetailPlayListPageView.qml

4.创建新函数,用于显示/隐藏“专辑歌单”页面

(1)创建函数:

showPlayList()        //显示“专辑歌单”页面

hidePlayList()          //隐藏“专辑歌单”页面

(2)编辑专辑歌单页面显示/隐藏函数

和上方第122~128行鼠标点击事件逻辑相似:

4.程序刚运行时不显示此页面

将defaultIndex默认值改为0,使其先加载“推荐内容”页面:

5.调用showPlayList()函数

在PageHomeView.qml中组件加载时调用显示专辑歌单页面函数,并注释其他行:

因为menuView.currentIndex中暂时没有内容,故需要先注释掉两函数中的repeater.itemAt()行:

Ctrl+R运行:

6.添加“推荐内容”页面的图片点击事件

(1)进入PageHomeView.qml文件,取消“加载组件Component.onCompleted:{}”的注释,并删除showPlayList()函数:

取消显示/隐藏专辑歌单页面函数中的repeater.itemAt()行:

(2)添加点击事件:

①进入DetailRecommendPageView.qml文件,找到轮播图“MusicBannerView”,按住Ctrl并左键它,进入MusicBannerView.qml文件,找到并完善onClicked:{}事件:

/* 点击左右侧图片时切换图片 */                                                                                                  
MouseArea                                                                                                           
{                                                                                                                   
    anchors.fill: parent                                                                                            
    cursorShape: Qt.PointingHandCursor      //切换鼠标形状                                                                
    onClicked:                                                                                                      
    {                                                                                                               
        if(bannerView.currentIndex === index)                                                                       
        {                                                                                                           
            var item  = bannerView.model[index]                                                                     
            var targetId = item.targetId + ""            //目标专辑的id号                                                      
            var targetType = item.targetType + ""        //targetType为1,则说明此歌曲为单曲;为10:专辑;为1000:歌单,加上引号时为了强制类型转换为字符串型
            switch(targetType)                                                                                      
            {                                                                                                       
                case "1":                                                                                           
                    //播放对应歌曲                                                                                        
                    break                                                                                           
                case "10":                                                                                          
                    //打开对应专辑                                                                                        
                    break                                                                                           
                case "1000":                                                                                        
                    //打开播放列表                                                                                        
                    break                                                                                           
            }                                                                                                       
            console.log(targetId,targetType)                                                                        
        }                                                                                                           
        else                                                                                                        
        {                                                                                                           
            bannerView.currentIndex = index                                                                         
        }                                                                                                           
    }                                                                                                               
}                                                                                                                   

其中,对于targetType:

Ctrl+R运行,随机点击轮播图的中心图片:

应用程序输出栏有了对应输出:

②“打开播放列表”需要调用“PageHomeView{}”中的playListView()函数,并传入参数“targetType”和“targetId”:

进入DetialPlayListPageView.qml文件,定义属性:“targetType”、“targetId”、“name”

 进入PageHomeView.qml文件,为函数定义添加参数:

③进入DetialPlayListPageView.qml文件,修改文本内容:

④添加targetId与targetType改变时的槽函数:

⑤分别定义加载“歌单”信息的函数loadPlayList()和加载“专辑”信息的函数loadAlbum():

getBannerList()函数逻辑类似,放在DetailPlayListPageView{}最后:

⑥给MusicListView加上额外的分页条件:

Ctrl+R运行,点击轮播图中任意“歌单”:

再次点击左侧菜单栏按键,发现歌单详情页没有隐藏:

7.隐藏专辑/歌单详情页

在PageHomeView中的onClicked:{}事件中添加隐藏歌单详情页的函数:

Ctrl+R运行,点击轮播图中任意“歌单”,再次点击菜单任意栏目,歌单就被隐藏了

二、“热门歌单”跳转歌单详情

1.添加MouseArea{}的onClicked:{}事件

注意:“热门歌单”中只有可能是歌单,故勿需用到targetType:

Ctrl+R运行,点击“热门歌单”中任意歌单都会出现对应歌单:

2.去掉默认数据

进入DetailPlayListPageView.qml文件

去掉详情页面上方文本中之前添加的默认数据:

去掉默认图片:

三、获取音频链接并播放

进入main.qml文件:

1.引入音频播放模块

import QtMultimedia 5.12    //音频播放

2.添加媒体播放组件MediaPlayer并设置id

放在main.qml 文件最后:

3.在MusicListView.qml的点击事件中查看id 

找到MusicIconButton(“播放/暂停”、“收藏”)按键:

打印id:

点击播放、收藏按钮,应用程序输出栏显示id:

4.添加播放音乐函数

(1)进入MusicListView.qml文件,在文件末添加函数playMusic():

其中,Index是当前播放音乐的索引

将id打印挪到播放函数中:

(2)在onClicked:{}事件中调用播放函数:

(3)添加播放(加载)乐接口函数内容:

5.设置音乐对应信息

(1)设置音乐列表封面cover

将MusicListView.qml中的播放音乐函数剪贴入LayoutBottomView{}中:

修改MusicListView中的播放按键的点击事件:

在LayoutBottomView.qml中添加播放列表:

再进入MusicListVIew.qml中,完善onClicked:{}事件:

将播放音乐划分成两个接口函数:

在DetailPlayListPageView.qml文件中map传递数据时多给一个参数--歌曲列表的封面图片cover

在DetailSearchPageView.qml文件中map传递数据时也多给一个参数--歌曲列表的封面图片cover

        由于localhost/3000/search?keywords中的cover图片都是同一张,故需要单独发起获取cover的请求----在LayoutBottomView.qml中添加函数接口getCover()

(2)设置底部功能栏“歌名/歌手”--nameText

Ctrl+R运行:

        至此,QT Quick QML项目音乐播放器⑩----“轮播图”跳转专辑/歌单详情、“热门歌单”跳转歌单详情、获取音频链接并播放完结,感谢您的阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值