• 9601阅读
  • 3回复

Qt 用Mplayer播放音乐的问题 [复制链接]

上一主题 下一主题
离线renhuan214
 

只看楼主 倒序阅读 楼主  发表于: 2008-10-10
— 本帖被 XChinux 执行加亮操作(2008-10-12) —
        我现在想用Mplayer播放音乐,首先当我点击一个按钮,出现一个Dialog,槽函数如下:

    void ThreadDialog::openmusicfile()
{                   


                /**************创建对话框 里面显示歌曲列表******************/
                    QFileDialog *dialog = new QFileDialog(this);   
      dialog->setDirectory("/tmp/music/");   
    dialog->setFileMode(QFileDialog::ExistingFile);   
    dialog->setFilter("Music files (*.mp3 *.wma )");
    dialog->setViewMode(QFileDialog::List);     
   
    if (dialog->exec() == QDialog::Accepted) {       
           QStringList fileNames = dialog->selectedFiles(); 
                              if (!fileNames.isEmpty()) {
                              QString fileName;
                        
                              int index = 0;
             fileName = fileNames.at(index);          //获得要播放的歌名
                              fprintf(stderr, "**************|%d|\n", index);  //输出index值 用于测试


                              const char *name = fileName.toLatin1().data();  // Qstring 转化 char 格式
                 char buffer[128];
                     sprintf(buffer, "echo loadfile %s > /tmp/read.pipe", name);//将歌名输入到buffer里面
                       fprintf(stderr, "===========|%s|\n", buffer);    //测试
                       system (buffer);      //向mplayer管道输出要播的歌名
        }
}

    当我点击(双击)任意一首歌时,外部的mplayer可以播放歌曲,但是index的值,我打印出来一直是0,证明我的fileNames列表只有我当前点击的这首歌,列表里的其他歌曲都不存在,这是怎么回事,明明我的fileNames选择了当前目录下所有的文件呀,是跟双击歌名有关系?

    我怀疑问题出现在
fileName = fileNames.at(index);  这一步,但是不知道怎么改!

    我需要歌名列表,因为我还要循环播放,但是目前fileNames列表里只有一首歌,当我循环播放的时候,只播点击的那首歌,郁闷!希望各位前辈可以指点一二!!!!
离线darrenmu

只看该作者 1楼 发表于: 2008-10-20
可用QDir,再获得LIST
离线hanaper
只看该作者 2楼 发表于: 2010-06-24
QDir dir(defaultPath);
    if (!dir.exists())
        return;
    QStringList filters;//过滤文件
         filters << "*.mp3" << "*.wav";
         dir.setNameFilters(filters);
         dir.setSorting(QDir::Name);//按名字排列
    QFileInfoList fileList = dir.entryInfoList();

        const QString &fileName = fileInfo.canonicalFilePath();
        Phonon::MediaSource source(fileName);//fileInfo.filePath());
        musicSourceList.append(source);//在当前列表后加入一条记录
        int rowNum = tableWidget->rowCount();
        addTableWidgetItem(rowNum);
    }
离线icedtea

只看该作者 3楼 发表于: 2019-01-30
快速回复
限100 字节
 
上一个 下一个