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

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);  }
  基本这样就可以做出来了。

女王和帕丁顿熊白金禧年派对上演了一段小品!画风简直太可爱啦刚刚过去的星期六,是女王登基70周年大庆的第三日,也是举办白金禧年皇宫派对的日子。这场派对是一场大型演唱会,地点在白金汉宫前的林荫大道上,超过22000位民众参加。因为演唱会是从傍脸是健康的晴雨表,青红黄白黑5种脸色,分别代表啥?平时看电视剧总会出现这样的剧情,一个小伙子走在路上,嘴里叼着一根烟,突然坐在路边的神算子发出声音小伙子,看你的面相,最近有血光之灾。听到这句话的人心里都会紧张,难道真的有大事要发生福禄寿水晶是哪些珠子福禄寿水晶这个名字听起来就很有意思,相信大家都很感兴趣,我们从名字可以看出来福禄寿应该是有三种珠子构成的,下面来了解下福禄寿水晶分别是哪三种珠子吧。福禄寿水晶一般是红发晶,绿发晶,梦华录首播收视全国第一,柳岩把男人扔到水里,网友大呼解气6月2号天仙刘亦菲,陈晓领衔主演的梦华录强势开播,首播当天连更8集。首播4小时更是以傲人的2000万收视率稳居2022年上半年收视率全国第一。这部剧成功的背后有许久不演戏的天仙刘亦这个电话,一定要接日前,家住浙江省宁波市海曙西门街道的王阿姨接到了一个自称是上海公安局警察的电话。在这个假警察的引导下,王阿姨加上了他的微信。随后,这名假警察谎称王阿姨的手机由于种种原因将停机,又称企业退休人员去世以后家属能领取多少抚恤金?家有90岁的老母亲心里感觉是什么企业退休人员去世以后,家属能领取多少抚恤金,在不同省直辖市自治区去世的,虽然领取抚恤金的标准已经统一,但具体领取的金额还是不一样的,而且差距还比较大2016年,四川农场挖出一铁罐,施工队以为是炸弹,专家挖到宝了江山有巴蜀,栋宇自齐梁。巴蜀,也就是如今的四川一带,自古以来就被视为人杰地灵兵家必争的重要区域。四川盆地是我国中西部经济发展的强力引擎,在旅游文化政治等各方面都发挥着不可替代的作用电动车6月大战!爱玛新日绿源小刀台铃九号,都出手了请您在阅读前,先点击上面的关注。感谢您的支持,我们将为您带来更多有价值的内容。随着各地超标车换购的持续展开,今年电动车行业的旺季市场,无疑是上量的绝佳时机,行业也势必会迎来一番龙争妻子约前男友,凌晨两点酒店被抓女婿说你要跳楼相亲结婚康州和妻子米晴是相亲认识的,当时康州大学毕业两年,在工作上刚刚有了一点起色,父母就催着康州赶紧结婚,康州知道老一辈人都比较在意终身大事,再加上自己的父母身体不好,所以康州也陕西小伙千里迢迢见网友,得知她身体残疾后,他的做法让人泪目残疾是让人感到非常悲惨的事情,在这里愿世界上的残疾人会越来越少,最终消失。有一位姑娘,她活得很惨,身体残疾,而且到了无法自理的地步,平时只能玩玩手机,根本无法行动。面对这样一个女孩20年前的老房子停止拆迁?新规有变,2022年三类老房子别轻易卖掉很长一段时间以来,城市里的老旧小区居民,都特别痴迷于拆迁。原因很简单,拆迁是普通人一夜致富一夜翻身的最佳途径之一。尤其是北上广深杭这样的寸土寸金的一线大城市,由于拆迁补偿标准高,老
王者归来,再造民企500强!如果他没入狱,常州可能已破万亿作者杨冠亚九十年代,在民营企业不断诞生的浪潮中,一个曾经推着小车收废铁的中年人在长江边成立了自己的钢铁厂,点燃了炼钢的烟囱,这个人就是昔日的钢铁大王戴国芳。1996年,戴国芳注册成BTC跌破2。2万!昨晚的剧烈下跌到底是怎么回事?如果你想抓住更多的市场机会,那么拥有一个优质的交流平台会让你少走弯路十七欢迎志同道合的朋友一起交流讨论觉得文章不错的可以点赞关注转发(公众号币圈情报员)今天凌晨看到消息Kraken国内以太网物理层芯片龙头,裕太微车载等多领域驱动成长(报告出品方分析师招商证券鄢凡王恬梁程加)一裕太微国内领先的以太网物理层芯片设计企业1深耕以太网物理层芯片领域,突破下游核心客户裕太微电子成立于2017年,专注高速有线通信芯片的研老用户换机一加Ace2不只是大内存和价格,这些体验也很关键一加Ace2的发布,让很多老加油蠢蠢欲动,其硬核配置和游戏体验确实是吸引力十足,虽然我现在使用的一加9R,才上手一年有余,性能表现和游戏体验杠杠的,但是看到一加Ace2在性能和游戏2月10日我国生猪价格再回暖,猪价行情逐步回升今天通过各地网友反馈,我国生猪价格行情再度提升,今天我国外三元生猪均价每公斤14。80元,较昨天的14。72元,提升0。08元,仍然是小幅度回升。另一方面,内三元每公斤14。24元投资人自述为什么看好RNA领域的Deepmind?近日,一家人工智能初创公司AtomicAI获得3500万美元的A轮融资,该公司将尖端机器学习与最先进的结构生物学相结合,以解锁RNA药物发现。AtomicAI由斯坦福大学转化而来,河北龙凤山铸业有限公司推动产学研合作千锤百炼铸造高纯生铁龙凤山铸业公司工人在车间生产。李树锋摄(中经视觉)走进位于河北省武安市的河北龙凤山铸业有限公司(以下称龙凤山铸业)厂区,车间内,铁花正在飞舞场地上,货车整装待发,处处是热火朝天的生江阴银行第一大股东变更后,第三大股东股权将被拍卖目前,华发实业的全部股权都已被冻结。同时,华发实业已多次被列为失信被执行人,法定代表人孙志华被限制高消费。江阴银行第三大股东持有的股份被拍卖。公开资料显示,江阴市人民法院将于202数字经济数聚廊坊建设信息产业名城数聚廊坊建设信息产业名城走进国家新型工业化产业示范基地图为维信诺(固安)第六代全柔AMOLED生产线项目基地。(本报资料片)维信诺公司供图凤河之南,一栋栋数据中心及配套楼拔地而起永对非经贸合作成绩斐然湖南建投获多个奖项湖南日报2月9日讯(全媒体记者王亮通讯员何力杰龚文骏)2月6日,亚欧非三方企业商会联合共同推进对非经贸合作恳谈会暨湖南省中非经贸合作促进研究会第二次理事大会在长沙召开,会上对202鄂西北山区崛起材富高地2月8日,湖北省襄阳市谷城县的旷野正下着绵绵春雨,但兴发集团RTV硅橡胶项目建设工地仍旧一片繁忙。这个项目要赶在今年上半年建成投产。谷城县发改委负责人告诉记者,该项目是当地硅基新材