Qt:音乐播放器
来源:互联网 发布:程序员项目经验 编辑:程序博客网 时间:2024/05/16 12:47
写在前面(学习Qt的记录):因为最初的程序设计问题,造成代码的耦合性很高,各个功能函数都集中在主函数中,某些功能未有完全实现(左边树列表点下一首时,继续播放在左列表的),记录经验,吸取教训;代码就贴的主要功能,还有XML文件配置等没贴出,下面是运行效果图。
以下为各个功能函数:
1.整体可拖动窗口:
声明:
//整体可拖动窗口 void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event);定义:
void MainWindow::mousePressEvent(QMouseEvent *event){ if(event->buttons() & Qt::LeftButton)//只响应左键 { m_draging = true; m_startPostion = event->globalPos(); m_framePostion = frameGeometry().topLeft(); } QWidget::mousePressEvent(event);//调用父类保持原有按键行文}void MainWindow::mouseMoveEvent(QMouseEvent *event){ if(event->buttons() & Qt::LeftButton) { QPoint offset = event->globalPos() - m_startPostion; move(m_framePostion+offset); } QWidget::mouseMoveEvent(event);}void MainWindow::mouseReleaseEvent(QMouseEvent *event){ m_draging = false; QWidget::mouseReleaseEvent(event);}左列表双击播放:
//左菜单双击播放void MainWindow::treewidgetMusic(QString leftMusic){ int count = ui->MusicWidget->count(); for(int i = 0;i < count; i++) { if(leftMusic == ui->MusicWidget->item(i)->text())//比较右边列表的歌名,此方法有缺陷。 { m_playList->setCurrentIndex(i); m_player->play(); timer->start(1000); QIcon icon("D:/QT_Library/MusicPlayer/icon/newStop.png"); ui->playerButton->setIcon(icon); player_stop = false; ui->pregressHorizontalSlider->setEnabled(true); ui->lastButton->setEnabled(true); ui->nextButton->setEnabled(true); ui->delButton->setEnabled(true); ui->playerButton->setEnabled(true); } }}
右键菜单(槽函数连接):
QAction *m_Love;QAction *m_Try;
void MainWindow::creatAction(){ m_Love = new QAction("添加到My-Love",this); m_Try = new QAction("添加到Try-hear",this);}
void MainWindow::showRightMenu(QPoint pos){ QMenu *menu = new QMenu; menu->addAction(m_Love); menu->addAction(m_Try); if(ui->MusicWidget->currentItem()) {// menu->exec(QCursor::pos()); menu->exec(ui->MusicWidget->mapToGlobal(pos));//全局坐标显示 }}播放暂停:
//播放/暂停void MainWindow::OnPlayBtnClicked(){ ui->pregressHorizontalSlider->setEnabled(true); //正在播放showLabe显示 ui->showLabel->setText(ui->MusicWidget->currentItem()->text()); if((player_stop == false) || (m_player->state() == QMediaPlayer::PlayingState)) { timer->stop(); m_player->pause(); QIcon icon("D:/QT_Library/MusicPlayer/icon/newPlayer.png"); ui->playerButton->setIcon(icon); player_stop = true; } else if((player_stop == true) || (m_player->state() == QMediaPlayer::PausedState)) { timer->start(1000); m_player->play(); QIcon icon("D:/QT_Library/MusicPlayer/icon/newStop.png"); ui->playerButton->setIcon(icon); player_stop = false; }}双击播放:
void MainWindow::OnDoubleClicked(QModelIndex index){ player_stop = true; ui->pregressHorizontalSlider->setEnabled(true); ui->lastButton->setEnabled(true); ui->nextButton->setEnabled(true); ui->delButton->setEnabled(true); ui->playerButton->setEnabled(true); QIcon icon("D:/QT_Library/MusicPlayer/icon/newStop.png"); ui->playerButton->setIcon(icon); player_stop = false; ui->showLabel->setText(ui->MusicWidget->currentItem()->text()); m_playList->setCurrentIndex(ui->MusicWidget->currentIndex().row() ); m_player->play(); timer->start(1000); time.setDate(date);//所以上边的data初始化时,数值不为0就好 time.setTime(timeProgress);}上一首:
//上一首void MainWindow::LastMusic(){// ui->playerButton->setText("暂停"); QIcon icon("D:/QT_Library/MusicPlayer/icon/newStop.png"); ui->playerButton->setIcon(icon); player_stop = false; m_player->setPosition(0); ui->pregressHorizontalSlider->setValue(m_player->position()); //这里注意的是,和我们正常数数一样,mediaCount是从1开始计数的 if(m_playList->currentIndex()!=0) { m_playList->setCurrentIndex(m_playList->previousIndex()); m_playList->previous(); m_player->play(); } else { m_playList->setCurrentIndex(m_playList->mediaCount()-1); m_player->play(); }}下一首:
//下一首void MainWindow::NextMusic(){ QIcon icon("D:/QT_Library/MusicPlayer/icon/newStop.png"); ui->playerButton->setIcon(icon); player_stop = false; m_player->setPosition(0); ui->pregressHorizontalSlider->setValue(m_player->position()); //这里注意的是,和我们正常数数一样,mediaCount是从1开始计数的 if(m_playList->mediaCount() - m_playList->currentIndex()!=1) { m_playList->setCurrentIndex(m_playList->nextIndex()); m_player->play(); } else { m_playList->setCurrentIndex(0); m_player->play(); }}播放模式:
//播放模式void MainWindow::OnConBoxChangeClicked(int number){ switch (number) { case 0: m_playList->setPlaybackMode(QMediaPlaylist::Loop);//循环列表 qDebug() << "0"; break; case 1: m_playList->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);//当前单曲循环 qDebug() << "1"; break; case 2: m_playList->setPlaybackMode(QMediaPlaylist::Random);//随机 qDebug() << "2"; break; default: break; }}音量调节:
//音量调节void MainWindow::OnVolumeChange(int volume){ m_player->setVolume(volume);}快进:
//快进void MainWindow::HorizontalSliderChange(int value){ if(m_player->state() == QMediaPlayer::PlayingState) { m_player->setPosition(value); m_player->pause(); QIcon icon("D:/QT_Library/MusicPlayer/icon/newPlayer.png"); ui->playerButton->setIcon(icon); player_stop = true; } m_player->play(); QIcon icon("D:/QT_Library/MusicPlayer/icon/newStop.png"); ui->playerButton->setIcon(icon); player_stop = false;}进度条跟随:
//进度条跟随void MainWindow::ChangPostion(){ //music->position()获取音乐当前播放位置 curr_position = m_player->position(); //music->duration()获取音乐总长度(注意:这个长度是音乐大小) ui->pregressHorizontalSlider->setMaximum(m_player->duration()); if(curr_position >= ui->pregressHorizontalSlider->maximum())//播放完毕 { timer->stop(); m_player->stop(); QIcon icon("D:/QT_Library/MusicPlayer/icon/newPlayer.png"); ui->playerButton->setIcon(icon); player_stop = true; ui->pregressHorizontalSlider->setSliderPosition(0); time.setDate(date); time.setTime(timeProgress);//重新把时间标签改为00:00 m_playList->next(); } timer->start(1000); m_player->play(); //刷新滑块位置 ui->pregressHorizontalSlider->setSliderPosition(curr_position);}实时播放时间:
//实时时间void MainWindow::upTime(qint64 position){ QTime duration(0, position / 60000, qRound((position % 60000) / 1000.0)); ui->startTimeLabel->setText(duration.toString("mm:ss")); if(!(m_playList->isEmpty())) { //当前播放歌曲在列表醒目提示 ui->MusicWidget->setCurrentRow(m_playList->currentIndex()); //正在播放showLabe显示 ui->showLabel->setText(ui->MusicWidget->currentItem()->text()); }}播放总时间:
//播放总时长void MainWindow::endTime(qint64 position){ if(m_player->state() == QMediaPlayer::PlayingState) { QTime duration(0, position / 60000, qRound((position % 60000) / 1000.0)); ui->endTimelabel->setText(duration.toString("mm:ss")); }}删除歌曲:
//删除void MainWindow::delBtnClicked(){ QListWidgetItem *item = ui->MusicWidget->currentItem(); ui->MusicWidget->removeItemWidget(item); delete item; if(m_playList->mediaCount() > 1) { qDebug() << "++++++++++++++++++++"; qDebug() << m_playList->mediaCount(); m_playList->removeMedia(m_playList->currentIndex()); m_player->EndOfMedia; } else if(m_playList->mediaCount() == 1) { qDebug() << "--------------"; qDebug() << m_playList->mediaCount(); m_playList->clear(); m_player->stop(); timer->stop(); ui->showLabel->clear(); ui->MusicWidget->clear(); ui->playerButton->setDisabled(true); ui->pregressHorizontalSlider->setDisabled(true); ui->nextButton->setDisabled(true); ui->lastButton->setDisabled(true); ui->delButton->setDisabled(true); }}美化相关:
//Qcombox美化设置/委托 QStyledItemDelegate* itemDelegate = new QStyledItemDelegate(); ui->comboBox->setItemDelegate(itemDelegate); //允许鼠标右键操作 ui->MusicWidget->setContextMenuPolicy(Qt::CustomContextMenu); //关闭滚动条 ui->MusicWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui->MusicWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setWindowFlags(Qt::Window | Qt::FramelessWindowHint);//无边框设置setAttribute(Qt::WA_TranslucentBackground);//设置背景透明主设计界面(偷懒,皮肤直接用的styleSheet)
具体代码:源码下载
阅读全文
0 0
- Qt音乐播放器
- QT音乐播放器
- Qt:音乐播放器
- Qt版音乐播放器
- 基于QT的音乐播放器
- Qt/C++ 音乐播放器源码
- 基于QT的音乐播放器
- qt之本地音乐播放器
- qt之本地音乐播放器
- Qt之音乐播放器一
- 4Qt音乐播放器的设计
- Qt学习之-简易音乐播放器
- Qt/C++ 模仿 酷狗音乐播放器Qt/C++ 模仿 酷狗音乐播放器
- QT简单音乐播放器(多界面来回切换、自定义界面,音乐播放)
- QT 音乐播放器 在windows里面的发布
- QT音乐播放器之-按钮切换显示图片
- QT平台上制作的音乐播放器
- QT学习小记1----音乐播放器(1)
- ABP官方文档(十六)【值对象】
- 立方差公式
- elasticsearch入门,linux上简单操作
- mysql 备份还原
- hdu 6158 The Designer && 计蒜客 Finding the Radius for an Inserted Circle 笛卡尔定理应用
- Qt:音乐播放器
- route-policy与filter-policy的区别
- springboot数据源切换
- 布料模拟碰撞检测的实施总结
- Android Studio 中 Gradle 依赖的统一管理
- Docker安装初体验(Windows)
- 简单递推
- Java中的内存划分
- vue学习第14天,混合mixin