• 11225阅读
  • 14回复

[讨论]phonon 写的音乐播放器 [复制链接]

上一主题 下一主题
离线tomtc123
 

只看楼主 倒序阅读 楼主  发表于: 2011-09-02






musicplayer.rar (7296 K) 下载次数:336



自己写的一个音乐播放器,没完成,不敢放作品展,遇到瓶颈了。
问题:①不能暂停;
         ②播放完一首不能自动下一首,
         ③播放进度条不动,
         ④没有播放列表。
。。。。。。。。

  有高手帮忙看下吗?附近有源码和已经封装好了的可执行文件。。。
离线tomtc123

只看该作者 1楼 发表于: 2011-09-02

大家可以下来看下。。。

我写的只能实现显示一首歌名,用了一个QLabel,只能显示最后一首歌名



离线tomtc123

只看该作者 2楼 发表于: 2011-09-02

我傻了,QLabel不能实现双击歌名播放的功能吧


离线lwtlwt0810

只看该作者 3楼 发表于: 2011-09-02
你把目录下的所有文件放在了链表里,for循环了一遍,i当然是等于int_musicsize,你再把这个name赋值给str_listfilename,当然只显示最后那个了
离线tomtc123

只看该作者 4楼 发表于: 2011-09-02
回 3楼(lwtlwt0810) 的帖子
   恩恩,发现了这个,改了下


for(int i=0;i<int_musicsize;i++)

    {
        str_listfilename+=filename.at(i)+"\n";
        listlabel->setText(str_listfilename);
    }

    listwidget->show();

要做播放列表,这个好像不行。
离线lwtlwt0810

只看该作者 5楼 发表于: 2011-09-02
回 4楼(tomtc123) 的帖子
你把每个标题都搞成超链接,或者不用label,找一个能接收鼠标点击事件的控件就好了(你做音乐播放器可以用QGraphicsView体系嘛)
离线tomtc123

只看该作者 6楼 发表于: 2011-09-02
回 5楼(lwtlwt0810) 的帖子
每个标题都搞成超链接啊,这个不会诶,我搜索看看。。。。
   QGraphicsView好用吗?我查了些资料大多都说用phonon做播发器。
离线cutemmll
只看该作者 7楼 发表于: 2011-09-03
其实不管用QGraphicsView还是用QWidget都无所谓,就拿播放列表来说,你可以用QListWidget呀。

而播放进度条根据当前播放时间的改变而改变就行了。
当前播放时长可以通过 tickInterval()  以及  void MediaObject::tick ( qint64 time ) [signal] 这两个东西来获取。

播放下一首,需要关联 void MediaObject::finished () [signal] 这个信号,然后做相应的操作就是了

详见类MediaObject,以及 Phonon Module
c------------enjoy qt & enjoy life-----------++
离线tomtc123

只看该作者 8楼 发表于: 2011-09-03
回 7楼(cutemmll) 的帖子
你还是新手上路吗?好厉害啊,我要加油啊,谢谢你了
离线roywillow

只看该作者 9楼 发表于: 2011-09-03
说实话,感觉这些东西只要仔细看看文档就能找到的……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线lwtlwt0810

只看该作者 10楼 发表于: 2011-09-05
回 6楼(tomtc123) 的帖子
恩      的确是用phonon做音乐播放器,只是个人感觉QGraphicsviewt控件的位置比较好控制...而且如果继承QGraphicswidget的话,自定义什么进度条啊什么的都挺方便的
离线tomtc123

只看该作者 11楼 发表于: 2011-09-05
回 10楼(lwtlwt0810) 的帖子
嗯,我试下。。。
离线liukang325

只看该作者 12楼 发表于: 2011-09-30
我也用Phonon写了个播放器,那些功能都实现了,

暂停的话,直接这样写
  头文件定义  Phonon::AudioOutput *audioOutput;
                   Phonon::MediaObject *mediaObject;
audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory,this);
mediaObject = new Phonon::MediaObject(this);
mediaObject->pause();
离线liukang325

只看该作者 13楼 发表于: 2011-09-30
自动播放下一首是:

connect(mediaObject,SIGNAL(finished()),this,SLOT(playNext()));

void MusicClient::playNext()
{
    if (flag == 1){
       on_pushButton_next_clicked();
    }
}

我定义了全局的标记flag
离线liukang325

只看该作者 14楼 发表于: 2011-09-30
播放列表,是用listWidget写的。
在ui界面里,在listWidget右击转到槽选择doubleClicked( QModelIndex )就可实现在播放列表里双击事件了。这是我的这个槽函数:
void MusicClient::on_listWidget_bd_doubleClicked(const QModelIndex &index)
{
    jj  = 1;
    ui->pushButton_play->setStyleSheet("border-image: url(./image/pause.png);");
    timer->start(1000);
    QString media,name;
    media.append(path);
    media.append(musiclist.at(index.row()));
    name.clear();
    name.append(musiclist.at(index.row()));
    ui->label_name->setText(name);
    ui->listWidget_bd->item(musicNO)->setSelected(true);
    mediaObject->setCurrentSource(media);
    mediaObject->play();
    flag = 1;
}
快速回复
限100 字节
 
上一个 下一个