一.项目设想php
最近刚开始学习QT,准备利用QT作一个音乐播放器。设想的基本功能是,可以播放本地歌曲,能从百度mp3下载制定歌曲,能显示歌词。html
二.进度git
2013.12.03github
http://bbs.qter.org/forum.php?mod=viewthread&tid=629&extra=&page=1 的教程看到了12章完了,对信号与槽,QT的内存管理,主要是定义对象时会定义子对象和父对象(不是C++意义上的继承类),当销毁父对象时,其children()上的全部对象均会被delete.ubuntu
2013.12.05dom
QT上的教程看到17章了,了解到了一个基本的文件对话框的建立方法。另外,要学会上QT网站搜索文档内容。
函数
2014.2.20
tornado
以mute_button(静音按钮)为例,总结下信号连接的方式。
布局
//不直接将clicked与后续信号连接的方式是,后续连接用到了一个本地成员变量player_muted_,于是经过函数过分
学习
connect(mute_button_,SIGNAL(clicked()),this,SLOT(MuteClicked())); void MyWidget::MuteClicked() { emit ChangeMuting(!player_muted_); } //更新播放器的静音状态 connect(this,SIGNAL(ChangeMuting(bool)),player_,SLOT(setMuted(bool))); //用于实时更新按钮的状态和成员变量player_muted connect(player_,SIGNAL(mutedChanged(bool)),this,SLOT(SetMuted(bool)))
能够看出,两次信号链接中间是经过QMediaPlayer来过渡的,而其信号能够实时更新按钮的状态。
2014.3.2
基本功能已实现,现对项目进行总结:
Qtcreator自带的demo(player),编译后运行没问题,可是播放音频文件会提示确实Gstreamer缺乏插件,解决方法是去ubuntu软件中心安装Gstreamer的插件。
最终本程序实在http://www.cnblogs.com/tornadomeet/archive/2012/09/23/2699077.html 博主的QT4的基础上借鉴Qtcreator自带的example实现的。下面附截图(未实现歌词功能,主要是以为我本身听歌通常不关注歌词。。)
针对这个项目,有如下几个方面想说一下:
1.以为不足的地方:1)在实现读取音乐文件时,打开音乐文件后没办法直接获取全部音乐文件的详细信息,于是播放列表只是简单的列了歌曲和格式,而没有列歌手时长等信息,并且每首歌曲的时长信息能够经过播放时QMediaplayer的信号来获取:
connect(player_, SIGNAL(durationChanged(qint64)), SLOT(durationChanged(qint64)));
(有知道好办法直接获取全部打开文件的详细信息的同窗,请指教。。)
2.本项目主要是用QTableWidget实现播放列表,而QWidget实现主界面,而使用QMediaPlayer和QMediaPlaylist实现音频文件的播放。而主界面的实现也都是用语言实现的,用QVBoxLayout管理布局。
3.目前获取音频文件的详细信息用的是mtag,mtag利用了taglib库(https://github.com/taglib/taglib)可是mtag是c语言库,只支持参数为char*,而程序中窗口得到的歌曲文件的名字是中文,经过tolatin1().data()转换过来时,没法识别中文名字或者路径的文件。待解决。(已解决,解决方法见http://my.oschina.net/u/263978/blog)