自学QT之简易音乐播放器基于QT5.5
来源:互联网 发布:apache destoon泛解析 编辑:程序博客网 时间:2024/05/17 07:01
自己写的音乐播放器,还存在很多bug,只是作为一种尝试而已。交流学习群:271251545
播放器实现的功能:添加歌曲、上一首、暂停、下一首、切换歌曲、托盘、任务栏对歌曲进行操作
界面偷懒,直接使用的设计师界面,歌曲列表使用的是qtablewidget做的
player头文件代码:
#ifndef PLAYER_H#define PLAYER_H#include <QWidget>#include <QMouseEvent>#include <QPoint>#include <QMediaPlayer>#include <QFileDialog>#include <QSystemTrayIcon>#include <QEvent>#include <QMenu>#include <QAction>#include "about.h"#include <QWinThumbnailToolButton>#include <QWinThumbnailToolBar>#include <QStandardItemModel>#include <QTableView>#include <QDirModel>#include <QDir>#include <QStringListIterator>#include <QMediaPlaylist>#include <QTimer>namespace Ui {class player;}class player : public QWidget{ Q_OBJECTpublic: explicit player(QWidget *parent = 0); ~player(); QPoint drag;//定义一个释放点 void mousePressEvent(QMouseEvent *);//窗口移动事件 void mouseMoveEvent(QMouseEvent *);//窗口移动事件 QMediaPlayer *myPlayer; QSystemTrayIcon *trayIcon;protected: QAction *quitAction; QAction *aboutAction; QAction *nextAction; QAction *pauseAction; QAction *backAction; QWinThumbnailToolButton *backToolBtn; QWinThumbnailToolButton *pauseToolBtn; QWinThumbnailToolButton *nextToolBtn; QWinThumbnailToolBar *taskBar; QStandardItemModel *songListModel; QStringList path; QMediaPlaylist *playList; QTimer *timer; qint64 pausePosition; int currentIndex;private slots: void on_closeBtn_clicked(); void on_miniBtn_clicked(); void on_pushButton_2_clicked(); void on_pauseBtn_clicked(); void on_volum_valueChanged(int value); void tuopan(QSystemTrayIcon::ActivationReason reason); void showAbout(); void myPlayerSlot(QModelIndex index); void on_importBtn_clicked(); void setPosition(); void on_horizontalSlider_valueChanged(int value); void on_nextBtn_clicked(); void on_backBtn_clicked(); void mediaChange(int);private: Ui::player *ui;};#endif // PLAYER_H
player.cpp文件代码:
#include "player.h"#include "ui_player.h"#include <QDebug>#include <QtWinExtras>#include <QList>player::player(QWidget *parent) : QWidget(parent), ui(new Ui::player){ ui->setupUi(this); this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint);//隐藏标题栏 setWindowIcon(QIcon(":/new/prefix1/image/tray.jpg")); myPlayer=new QMediaPlayer(); ui->volum->setValue(50); myPlayer->setVolume(ui->volum->value()); playList=new QMediaPlaylist; trayIcon=new QSystemTrayIcon; connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this, SLOT(tuopan(QSystemTrayIcon::ActivationReason)));//将托盘图标和双击事件关联 QPixmap pixmap(":/new/prefix1/image/background.jpg");//当前文件夹下面的图片 QPalette palette = this->palette(); palette.setBrush(backgroundRole(), QBrush(pixmap)); connect(playList,SIGNAL(currentIndexChanged(int)),this,SLOT(mediaChange(int))); setPalette(palette); //任务栏按钮 QMenu * menu=new QMenu(this); if (QtWin::isCompositionEnabled()) { QtWin::enableBlurBehindWindow(menu); } else{ QtWin::disableBlurBehindWindow(menu); menu->hide(); } taskBar=new QWinThumbnailToolBar(); taskBar->setWindow(windowHandle()); backToolBtn=new QWinThumbnailToolButton(taskBar); backToolBtn->setToolTip("上一首"); backToolBtn->setIcon(QIcon(":/new/prefix1/image/back.png")); connect(backToolBtn,SIGNAL(clicked()),this,SLOT(on_backBtn_clicked())); pauseToolBtn=new QWinThumbnailToolButton(taskBar); connect(pauseToolBtn,SIGNAL(clicked()),this,SLOT(on_pauseBtn_clicked())); pauseToolBtn->setToolTip("暂停"); pauseToolBtn->setIcon(QIcon(":/new/prefix1/image/pause.png")); nextToolBtn=new QWinThumbnailToolButton(taskBar); nextToolBtn->setToolTip("下一首"); nextToolBtn->setIcon(QIcon(":/new/prefix1/image/next.png")); connect(nextToolBtn,SIGNAL(clicked()),this,SLOT(on_nextBtn_clicked())); taskBar->addButton(backToolBtn); taskBar->addButton(pauseToolBtn); taskBar->addButton(nextToolBtn); //歌曲列表 songListModel=new QStandardItemModel; songListModel->setHorizontalHeaderItem(0,new QStandardItem(QObject::tr("歌曲列表"))); ui->songList->setModel(songListModel); ui->songList->setColumnWidth(0,390); ui->songList->verticalHeader()->hide(); ui->songList->setEditTriggers(QAbstractItemView::NoEditTriggers); ui->songList->setSelectionBehavior(QAbstractItemView::SelectRows); connect(ui->songList,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(myPlayerSlot(QModelIndex))); //定时器 timer=new QTimer; connect(timer,SIGNAL(timeout()),this,SLOT(setPosition()));}player::~player(){ delete ui;}void player::on_closeBtn_clicked()//单击关闭按钮,产生托盘和托盘菜单{ this->hide(); ui->nameLabel->styleSheet(); trayIcon->setIcon(QIcon(":/new/prefix1/image/tray.jpg")); QMenu *trayMenu=new QMenu(); aboutAction=new QAction(tr("关于"),this); quitAction=new QAction(tr("退出"),this); trayMenu->addAction(aboutAction); connect(aboutAction,SIGNAL(triggered(bool)),this,SLOT(showAbout())); trayMenu->addAction(quitAction); connect(quitAction,SIGNAL(triggered(bool)),this,SLOT(close())); trayIcon->setContextMenu(trayMenu); trayIcon->setToolTip("托盘图标"); trayIcon->show(); trayIcon->showMessage("主人","我在这里哦",QSystemTrayIcon::Information,5000);//一定要放在这里,否则提示信息会不显示}void player::on_miniBtn_clicked(){ this->showMinimized();}void player::mousePressEvent(QMouseEvent *e){ if(e->button()==Qt::LeftButton)//button()是按钮 { drag=e->globalPos()-this->geometry().topLeft();//鼠标位置减去左上角的左边 e->accept(); }}void player::mouseMoveEvent(QMouseEvent *e){ if(e->buttons()&Qt::LeftButton)//buttons()返回的是按钮状态 { move(e->globalPos()-drag); e->accept(); }}//选择歌曲void player::on_pushButton_2_clicked(){ QString path=QFileDialog::getOpenFileName(this,tr("选择一首歌曲"),"/","*.mp3"); QFileInfo fileInfo; fileInfo=QFileInfo(path); QString fileName=fileInfo.baseName(); ui->nameLabel->setText(fileName); myPlayer->setMedia(QUrl::fromLocalFile(path)); myPlayer->play();}//暂停按钮void player::on_pauseBtn_clicked(){ switch (myPlayer->state()) { case QMediaPlayer::PlayingState: timer->stop(); currentIndex=playList->currentIndex(); pausePosition=myPlayer->position(); myPlayer->pause(); break; case QMediaPlayer::PausedState: myPlayer->setMedia(playList->media(currentIndex)); myPlayer->setPosition(pausePosition); timer->start(1000); myPlayer->play(); break; default: break; }}//音量调节void player::on_volum_valueChanged(int value){ myPlayer->setVolume(value);}void player::tuopan(QSystemTrayIcon::ActivationReason reason)//双击托盘图标,恢复程序正常界面{ switch (reason) { case QSystemTrayIcon::DoubleClick: this->showNormal(); break; default: break; }}//显示关于本程序对话框void player::showAbout(){ about showabout; showabout.setModal(false); showabout.setWindowTitle("关于本程序"); showabout.exec();}//导入多首歌曲void player::on_importBtn_clicked(){ path=QFileDialog::getOpenFileNames(this,"选择歌曲","/","(*.mp3)"); int i=0; QString addSongs; QListIterator<QString> mylist(path); while(mylist.hasNext()) { addSongs=mylist.next(); QFileInfo fileInfo; fileInfo=QFileInfo(addSongs); QString fileName=fileInfo.fileName(); songListModel->setItem(i,0,new QStandardItem(fileName)); playList->addMedia(QUrl::fromLocalFile(addSongs)); i++; } playList->setPlaybackMode(QMediaPlaylist::Loop); myPlayer->setPlaylist(playList);}//双击播放void player::myPlayerSlot(QModelIndex index){ timer->start(1000); int n=index.row(); playList->setCurrentIndex(n);// myPlayer->setMedia(playList->currentMedia());这句话不能加,加了反而错误 myPlayer->play();}//设置播放进度条void player::setPosition(){ qint64 position=myPlayer->position(); ui->horizontalSlider->setMaximum(myPlayer->duration()); ui->horizontalSlider->setSliderPosition(position);}void player::on_horizontalSlider_valueChanged(int value)//快进和快退功能{ qint64 currentPosition=myPlayer->position(); if(qAbs(value-currentPosition)>2000&&(ui->horizontalSlider->value()!=0)) { myPlayer->stop(); timer->stop(); myPlayer->setPosition(value); timer->start(); myPlayer->play(); }}void player::on_nextBtn_clicked()//播放下一首{ if(playList->mediaCount()-playList->currentIndex()!=1)//这里注意的是,和我们正常数数一样,mediaCount是从1开始计数的 { //myPlayer->setMedia(playList->media(playList->nextIndex())); playList->setCurrentIndex(playList->nextIndex()); myPlayer->play(); } else { playList->setCurrentIndex(0); // myPlayer->setMedia(playList->media(0)); myPlayer->play(); }}void player::on_backBtn_clicked()//播放上一首{ if(playList->currentIndex()!=0)//这里注意的是,和我们正常数数一样,mediaCount是从1开始计数的 { //myPlayer->setMedia(playList->media(playList->previousIndex())); playList->setCurrentIndex(playList->previousIndex()); myPlayer->play(); } else { playList->setCurrentIndex(playList->mediaCount()-1); //myPlayer->setMedia(playList->media(playList->mediaCount()-1)); myPlayer->play(); }}void player::mediaChange(int i){ ui->nameLabel->setText(path.at(i));}
关于对话框头文件:
#ifndef ABOUT_H#define ABOUT_H#include <QWidget>#include <QDialog>class about : public QDialog{ Q_OBJECTpublic: explicit about(QWidget *parent = 0);signals:public slots:};#endif // ABOUT_H
关于对话框源码:
#include "about.h"#include <QLabel>#include <QGridLayout>about::about(QWidget *parent) : QDialog(parent){ QLabel *aboutLabel=new QLabel; aboutLabel->setText("小黑版本QT音乐播放器"); QHBoxLayout *mainLayout=new QHBoxLayout(this); mainLayout->addWidget(aboutLabel,Qt::AlignCenter);}主函数:
#include "player.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); player w; w.show(); return a.exec();}
因为分享而快乐!QT&C++编程爱好者:271251545
0 0
- 自学QT之简易音乐播放器基于QT5.5
- Qt学习之-简易音乐播放器
- QT5简易音乐播放器的设计
- Qt学习之路_14(简易音乐播放器)
- Qt学习之路_14(简易音乐播放器)
- Qt学习之路_14(简易音乐播放器)
- Qt学习之路_14(简易音乐播放器)
- 基于Service的简易音乐播放器
- Qt5音乐播放器
- QT5音乐播放器
- 基于QT的音乐播放器
- 基于QT的音乐播放器
- 简易音乐播放器
- 简易音乐播放器
- 简易音乐播放器
- 【Android】基于Service组件的简易音乐播放器
- qt之本地音乐播放器
- qt之本地音乐播放器
- 3333333333
- 1009. 说反话 (20)
- STL源码剖析红黑树插入状况理解
- hdu1847 Good Luck in CET-4 Everybody!
- 精益之美甚于帕斯雀(摘自《代码之道》第2章)
- 自学QT之简易音乐播放器基于QT5.5
- OpenCV-Mat结构详解
- 传输层
- Handler Android应用开发消息机制
- 【IOS 开发学习总结-OC-62】IOS 应用的生命周期
- 开始记录 iOS后台计时的代码。
- 线段树模板
- 重构:运用Java反射加多态 “干掉” switch
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第六课)多个MVC的程序和故事版、UINavigationController、 Segues