hukumiko 发表于 2020-3-10 18:34:39

关于音乐播放器播放列表用数据库保存的问题

我用Qt做了个音乐播放器,现在想将添加到播放列表的音乐用数据库保存,但是创建了数据库后,在添加音频文件的地方将音乐数据添加进数据库,结果未能实现,想请教各位大佬该怎么用数据库保存音乐列表,下次打开还在呢

学到老 发表于 2020-3-13 09:53:06

本帖最后由 学到老 于 2020-3-13 09:56 编辑

1.可以用QSQLite数据库,将有关信息保存在本地。下次程序打开时再从里面读数据。类似于文件读写操作,具体可以查看书籍或网上资料。
2.用文件读写方式更简单些,Json格式、xml格式、配置文件格式、甚至自定义格式都可以用。
3.保存的是文件资源路径的话简单些。如果要把音乐文件保存进数据库,这个没试过。或许要存二进制数据吧。



hukumiko 发表于 2020-3-17 18:50:59

学到老 发表于 2020-3-13 09:53
1.可以用QSQLite数据库,将有关信息保存在本地。下次程序打开时再从里面读数据。类似于文件读写操作,具体 ...

我现在就是可以把文件的路径存到数据库里,但是我再用addmedia想放到playerlist里,歌曲名是会显示的,但是双击程序就会无响应退出

hukumiko 发表于 2020-3-17 18:54:52

附上我显示数据库内容和双击播放的代码

void MainWindow::init_list()
{

    QSqlQuery query;
    model=new QSqlTableModel(this);//本地音乐列表数据库模型
    model->setTable("LocalMusic");
    model->select();
   query.exec("select * from LocalMusic");
   while(query.next())//初始化本地音乐播放列表
   {
       int in=query.value(0).toInt();
       QString SongName=query.value(1).toString();
       QString SingerName=query.value(2).toString();
       QString SongPath=query.value(3).toString();
       qDebug()<<in<<SongName<<SingerName<<SongPath;
       // Playerlist->addMedia(QMediaContent(QUrl::fromLocalFile(SongPath)));
      //player->setPlaylist(Playerlist); //将播放列表加载到播放器
       if(!SongName.isEmpty()&&!SingerName.isEmpty())
       {

         int count = ui->MusicList->rowCount();
         ui->MusicList->setRowCount(count+1);
         QTableWidgetItem *itemName = new QTableWidgetItem(SongName);
         QTableWidgetItem *itemName1 = new QTableWidgetItem(SingerName);
         Playerlist->addMedia(QMediaContent(QUrl::fromLocalFile(SongPath)));
         ui->MusicList ->setItem(count,0,itemName);
         ui->MusicList -> setItem(count,1,itemName1);


       }

   }
//player->setPlaylist(Playerlist); //将播放列表加载到播放器
}void MainWindow::on_MusicList_doubleClicked(const QModelIndex &index)
{

    player->setPlaylist(Playerlist);
    int currentIndex = index.row();//获得QTableWidget列表点击的行数
    Playerlist->setCurrentIndex(currentIndex);

    player->play();
    if(!isPlay)
    {
      ui->SPButton->setIcon(QIcon(QPixmap(":/new/prefix1/image/pause.ico").scaled(ui->SPButton->rect().size())));
      isPlay = true;
    }

}

页: [1]
查看完整版本: 关于音乐播放器播放列表用数据库保存的问题