范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Qt5QMediaPlayer音乐播放器

  1、先上效果图:
  好了,现在讲讲我是怎么写的吧,首先最基本的播放歌曲代码应该就是:QMediaPlayer  *music = new QMediaPlayer(this);//初始化音乐  QMediaPlaylist *playlist = new QMediaPlaylist(this);//初始化播放列表  playlist->setPlaybackMode(QMediaPlaylist::Loop);//设置播放模式(顺序播放,单曲循环,随机播放等)  playlist->addMedia(QUrl::fromLocalFile("D:/xx/yy/mm.mp3"));//添加歌曲,这里添加的是歌曲的路径  playlist->addMedia(QUrl::fromLocalFile("D:/xx/yy/mm2.mp3"));//添加歌曲,这里添加的是歌曲的路径  music->setPlaylist(playlist);  //设置播放列表 music->play();//播放歌曲
  这样就能按播放列表来播放了
  然后playlist里面的歌曲是看不到的,就需要一个列表来显示歌曲,我用的是QListWidget,这样的话,只需要把列表项与playlist里面的歌曲对应上就可以了,然后要保存歌曲,数据库自然就少不了了,可以用Qt自带的数据库QSQLITE,然后创建数据库和表,写个函数
  【领QT开发教程 学习资料,点击下方链接莬费领取↓↓ ,先码住不迷路~】
  点击→领取「链接」static bool CreatConnection() {  QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");//建库 db.setDatabaseName("mymusic.db");//给数据库起名字 if(!db.open()) {     return false; } QSqlQuery query;  query.exec(QString("create table LocalMusic (id int,MusicName varchar,FileName varchar,     primary key(id,MusicName,FileName))"));//本地音乐列表数据,把歌曲名和歌曲路径给存起来 return true; }
  在main函数中先执行这个函数,创建个数据库即可。
  添加歌曲:QListWidget *list = new QListWidget(this); QSqlQuery query;  QStringList list=QFileDialog::getOpenFileNames(this,QString::fromLocal8Bit("文  件"),currentFileName[1],QString::fromLocal8Bit("音频文件(*.mp3)"));//用个文件登陆框来选择.mp3文件,包括多个文件  if(!list.isEmpty()){  for(int i=0;iaddMedia(QUrl::fromLocalFile(path)); QString Name=path.split("").last(); QListWidgetItem *item = new QListWidgetItem(QIcon("图片.png"),Name); item->setToolTip(Name); list->addItem(item); query.exec(QString("insert into values(%1,"%2","%3")").arg(i).arg(Name).arg(path);  }  }
  这样就列表上就可以显示歌曲了,并且把歌曲信息保存到数据库里了,可以在初始化的时候把数据库的歌名添加到列表中即list,把歌曲路径添加到播放列表中即playlist,但是显示的歌曲如果太多就会出现滚动条,默认的滚动条貌似不是很好看,可以用一下代码美化滚动条QString listWidgetStyle = "QScrollBar:vertical"                                   "{"                                       "width:8px;"                                       "background-color:transparent;"                                       "margin:0px,0px,0px,0px;"                                      " padding-top:12px;   /*上预留位置*/"                                      " padding-bottom:12px;    /*下预留位置*/"                                   "}"                                    "QScrollBar::handle:vertical"                                  " {"                                  "     width:8px;"                                  "     background-color:rgba(255,255,255,0.2);"                                  "     border-radius:4px;"                                  "     min-height:20px;"                                  " }"                                    "QScrollBar::handle:vertical:hover"                                  "{"                                  "    width:9px;"                                  "    background-color:rgba(255,255,255,0.5);"                                  "    border-radius:4px;"                                  "    min-height:20;"                                  "}"                                   "QScrollBar::add-line:vertical"                                  "{"                                  "     height:12px;"                                  "     width:10px;"                                  "     border-image:url(:/selectfile/scroll/3.png);"                                  "     subcontrol-position:bottom;"                                  "}"                                   "QScrollBar::sub-line:vertical"                                  "{"                                  "     height:12px;"                                  "     width:10px;"                                  "     border-image:url(:/selectfile/scroll/1.png);"                                  "     subcontrol-position:top;"                                  "}"                                  "QScrollBar::add-line:vertical:hover"                                  "{"                                  "     height:12px;"                                  "     width:10px;"                                  "     border-image:url(:/selectfile/scroll/4.png);"                                  "     subcontrol-position:bottom;"                                  " }"                                    " QScrollBar::sub-line:vertical:hover"                                  " {"                                  "     height:12px;"                                  "     width:10px;"                                  "     border-image:url(:/selectfile/scroll/2.png);"                                  "     subcontrol-position:top;"                                  " }"                                   " QScrollBar::add-page:vertical,"                                  "QScrollBar::sub-page:vertical"                                  " {"                                  "     background-color:transparent;"                                  "     border-radius:4px;"                                  "}";      ui->list->verticalScrollBar()->setStyleSheet(listWidgetStyle);
  然后就是得有个进度条,和歌曲时间
  进度条,进度条自然是用QHorizontalSlider了,主要就是歌曲进度得随着播放进度变化,所以可以使用信号和槽,QMediaPlayer有两个信号,QMediaPlayer::positionChanged和QMediaPlayer::durationChanged,分别是当前歌曲播放位置的变化,和切换歌曲时的歌曲长度,那么就需要写两个槽来接收这两个信号了//1.  void Widget::updatePosition(qint64 position)//接收歌曲位置改变,那么滑块的位置也要变 { ui->horizontalSlider->setValue(position);//设置滑块位置 }//2 void Widget::updateDuration(qint64 duration)//更新播放歌曲的时间 {  ui->horizontalSlider->setRange(0,duration);//根据播放时长来设置滑块的范围 ui->horizontalSlider->setEnabled(duration>0);  ui->horizontalSlider->setPageStep(duration/10);//以及每一步的步数  }
  然后将他们连接就可以了connect(music,&QMediaPlayer::positionChanged,this,&Widget::updatePosition);  connect(music,&QMediaPlayer::durationChanged,this,&Widget::updateDuration);
  还有就是列表选中的歌曲也要跟着playlist的歌曲变化来变化,需要利用QMediaPlaylist::currentIndexChanged信号,故写槽:void Widget::updateList(int value){  ui->list->item(value)->setSelected(true);  }
  然后connect(playlist,&QMediaPlaylist::currentIndexChanged,this,&Widget::updateList);
  播放暂停的话就直接点播放个按钮就music->play();点个暂停按钮就music->puase();
  然后还有就是时间的转换,mp3的时间是用毫秒来算的,那么就要变成 分钟:秒 的格式,可以写个函数来转换:static QString Time(qint64 time)//转换时间 {     qint64 seconds=time/1000;     const qint64 minutes=seconds/60;     seconds-=minutes*60;     return QStringLiteral("%1:%2")             .arg(minutes, 2, 10, QLatin1Char("0"))             .arg(seconds, 2, 10, QLatin1Char("0")); }
  然后还有播放模式,其实就是为playlist设置播放模式就可以了,比如顺序播放playlist->setPlaybackMode(QMediaPlaylist::Loop);
  单曲循环playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);,随机播放playlist->setPlaybackMode(QMediaPlaylist::Random);等
  上一首和下一首也很容易
  上一首:当上一首按钮点击执行void Widget::preMusic(){ int row = playlist->mediaCount();//获取歌曲数量 int current  = playlist->currentIndex();//获取当前位置 if(--current<0){ current=0; } playlist->setCurrentIndex(current);//设置当前音乐 ui->list->scrollToItem(ui->list->item(current));//滚动到当前音乐 music->play();//播放  }
  下一首:点击下一首按钮时执行void Widget::nextMusic(){ int row = playlist->mediaCount();//获取歌曲数量 int current  = playlist->currentIndex();//获取当前位置 if(++current>row){ current=0; } playlist->setCurrentIndex(current);//设置当前音乐 ui->list->scrollToItem(ui->list->item(current));//滚动到当前音乐 music->play();//播放  }
  歌曲定位也很好做,歌曲定位:点击歌曲定位按钮执行void getIndex(){  ui->list->item(playlist->currentIndex())->setSelected(true);  }
  基本这样就可以做出来了。

翻盘8连胜!中国金花停不下来,创2纪录,直通澳网,冲第2冠昨日,ITF东京W60赛迎来女单焦点战。王欣瑜面对主场作战的日本名将土居美咲,首盘失利后打出强势反击,21翻盘对手,8连胜日本球员入围4强,创造2大纪录,剑指第2冠。王欣瑜是中国女否极泰来!英锦8强赛丁俊晖火力全开,速战速决零封火箭冲冠在望北京时间11月18日21日,万众瞩目十分吸睛的丁奥第30次对决开打,此为国际台联英锦赛8强赛,在本场对决之前,16强赛中,火箭以60零封中国小将周跃龙,打得跃龙毫无招架之力,一颗红中国体坛喜讯不断!海外连夺4项冠军,这些冷门项目你关注吗?北京时间2022年11月19日,中国体坛经历了梦幻般的一天,在一些相对冷门的项目中,中国选手夺得4个冠军,分别是蹦床世锦赛女子网上团体赛冠军宁忠岩夺得速度滑冰世界杯男子1000米冠伦纳德复出,快船一度落后12分!乔治状态低迷,雷吉16分难救主伦纳德迎来复出新赛季好不容易迎来复出,却只替补出战了两场比赛,就再度因为膝盖伤病管理,而长时间缺阵的伦纳德,终于回归了赛场。没错,在快船本次主场接受底特律活塞挑战的过程中,伦纳德回王楚钦和林高远又输了!男乒让刘国梁忧心,怪不得张本智和敢说2022年乒乓球亚洲杯,中国男乒再次让球迷忧心忡忡,青黄不接的阶段,还遇到了外协会实力剧增。巴黎奥运会上,20年不败的神话真的要被终结了吗?这个说法要从成都世乒赛开始说起,中国男团世界杯热身赛2埃及德布劳内失误送礼萨拉赫助攻北京时间11月18日晚23点,比利时队进行一场世界杯之前的热身赛,对手是埃及队。上半场,德布劳内罕见失误被对手抓住,由默罕默德打进一球下半场,萨拉赫送出妙传,特雷泽盖破门扩大比分,一觉醒来,斯诺克3大冷门!丁俊晖创纪录,小司机KO墨菲将破荒?斯诺克英锦赛进行得如火如荼,一觉醒来,3大冷门诞生。丁俊晖创造新纪录,成为首位在三大赛零封奥沙利文的选手利索夫斯基手感炸裂,轰出4杆破百和50完美开局,最终61暴打世界冠军墨菲,剑踢上热搜的甘肃泾川,还有更出名的王母宫大云寺一战成名!11月17日下午,中国足坛爆出大冷门!在2022年足协杯第二轮比赛中,一支来自甘肃的县级球队泾川文汇足球队在常规时间内22战平中超豪门球队北京国安,随后点球大战以总比分7央视体育今日直播斯诺克英锦赛福德)央视体育今日直播斯诺克英锦赛半决赛(丁俊晖vs汤姆福德)今天是2022年11月19日,星期六。央视体育今日直播赛事如下090020222023赛季中国冰壶联赛(伊春站)男子决赛,C2000元以内,小米和vivo的高性价比手机推荐小米和vivo这两个牌子里10002000的手机哪个性价比高,有没有推荐的?看来题主也下了功夫了,直接就将当前性价比高的两款手机品牌小米和vivo给点出来。但小米和vivo旗下还是大屏手机真的不多见了,这款6。92英寸无挖孔大屏手机降至2098元提起大屏手机,就是接近7英寸的型号,现在确实不多了,很多厂商都将尺寸锁定在6。7英寸左右。但是,也有厂商比较较真,一直在发展大屏手机,比如说中兴,刚将旗下的6。92英寸大屏手机降价
七十年代长安街夜间训练的神密自行车队一九七三年深秋北京长安街,凌晨一点至三点左右,东单至西单宽敞明亮的马路上,风驰电掣往返着一只从天而降的自行车队一路上几个24小时值班的交通岗亭,无一例外的都给了绿灯通行(人工电话操大陆营收一落千丈背后德国X第三代半导体是当前半导体产业热门领域之一,这类材料因具有更大的禁带宽度更高的击穿电场强度更高的饱和电子漂移速率和更高的热导率等优势,在高功率高电压高频率等领域的运用越来越广泛。作为正经科普睡觉时做春梦,是潜意识还是生理反应?别羞于了解我们晚上睡觉的时候一般都会做梦,这属于一种正常的现象,而且很多时候我们所做的梦都是奇奇怪怪,没有什么踪迹可循的,大多都是因为我们白天太过于劳累,大脑神经处于紧张状态所导致的。一般情武汉霍乱的病原体到底来自哪里,为什么突然就在武汉出现了呢?近日,武汉大学一名研究生确诊为霍乱,由于霍乱是甲级传染病,所以这个病例引起了广泛关注,同时武汉大学也采取许多排查和隔离的防疫措施。霍乱是最古老的人类传染病之一,它一直潜伏在人类社区交通银行一储户被偷走近43万元,当银行人脸识别系统被攻破来源中国新闻周刊李红(化名)万万没想到,诈骗人员从她的交通银行卡偷走近43万元,如入无人之境。要想从交通银行卡中转账,需要用户在手机银行App上进行人脸识别,并进行短信验证。李红陷断供潮房奴开发商银行三方的博弈拆金校尉(资深金融从业者)楼市最是牵人心。一个个无助的烂尾业主喊话视频,一篇篇集体断供的声明,一只只跳水的银行股(被市场认定为涉房占比高)共同交织成眼下大家对个体安身立命对金融市场2022香港ib成绩公布,实在是太高了不管是IB课程,还是DSE课程放榜,各大媒体头条都是状元诞生的新闻,买菜师奶们在街市碰头时最热门谈资。其实也不怪香港人热爱宣传IB状元,实在是香港的IB成绩太!高!了!只有700万多地高温热搜蚂蚁落地活不过3秒!人类最多能承受多少度高温?还未入夏时,河南多地出现40度以上高温,入夏之后高温愈演愈烈,很多地方路都晒化了2022年7月以来,各地高温天气火力全开,蚂蚁落地3秒即亡,高温一事多次登上网络平台热搜榜,很多人对火车轨道热到起火野火肆虐高温已致欧洲数百人死亡今年6月以来,热浪侵袭北半球多个国家。英国法国和韩国等发布了高温预警,日本和美国多地高温破纪录。专家将北半球今夏的高温炙烤模式归因于气候变化,并提醒公众加强自我防护。英国发布首个高7月18日周一新闻联播要闻20条7月18日周一新闻联播要闻20条财联社7月18日电,今天新闻联播主要内容有1习近平向全球重要农业文化遗产大会致贺信2央视快评保护农业文化遗产是人类共同的责任3奋进新征程建功新时代非关晓彤再被造谣,工作人员霸气回怼简直离谱,绝不会姑息前两天一则与关晓彤有关的爆料冲上微博热搜,该消息声称关晓彤因为名下奶茶店违法经营问题或将面临牢狱之灾,顿时在网上引起轩然大波。值得一提的是,这并不是关晓彤第一次因为这件事上热搜,从