做100个网站,西安百度推广公司,西安市建设银行网站,做网站可以在哪儿接活Qt 项目实战 | 音乐播放器 Qt 项目实战 | 音乐播放器播放器整体架构创建播放器主界面 官方博客#xff1a;https://www.yafeilinux.com/
Qt开源社区#xff1a;https://www.qter.org/
参考书#xff1a;《Qt 及 Qt Quick 开发实战精解》
Qt 项目实战 | 音乐播放器
开发环… Qt 项目实战 | 音乐播放器 Qt 项目实战 | 音乐播放器播放器整体架构创建播放器主界面 官方博客https://www.yafeilinux.com/
Qt开源社区https://www.qter.org/
参考书《Qt 及 Qt Quick 开发实战精解》
Qt 项目实战 | 音乐播放器
开发环境Qt Creator 3.3.0 Qt 4.8.6 播放器整体架构 创建播放器主界面
新建 Qt Gui 应用项目名 myPlayer基类为 QWidget类名为 MyWidget。
添加资源文件 myImages前缀为空将 images 中的所有图片都添加进去。 myPlayer.pro 添加代码
QT phonon在 mywidget.h 添加头文件和类前置声明
#include phononclass QLabel;添加私有变量、函数
Phonon::MediaObject *mediaObject;
QAction *playAction;
QAction *stopAction;
QAction *skipBackwardAction;
QAction *skipForwardAction;
QLabel *topLabel;
QLabel *timeLabel;void initPlayer();添加私有槽
private slots:void updateTime(qint64 time);void setPaused();void skipBackward();void skipForward();void openFile();void setPlaylistShown();void setLrcShown();在 mywidget.cpp 中添加头文件
#include QLabel
#include QToolBar
#include QVBoxLayout
#include QTime在构造函数中添加代码
initPlayer();添加 initPlayer() 函数的定义
// 初始化播放器
void MyWidget::initPlayer()
{// 设置主界面标题、图标和大小setWindowTitle(tr(音乐播放器));setWindowIcon(QIcon(:/images/icon.png));setMinimumSize(320, 160);setMaximumSize(320, 160);// 创建媒体图mediaObject new Phonon::MediaObject(this);Phonon::AudioOutput* audioOutput new Phonon::AudioOutput(Phonon::MusicCategory, this);Phonon::createPath(mediaObject, audioOutput);// 关联媒体对象的tick()信号来更新播放时间的显示connect(mediaObject, SIGNAL(tick(qint64)), this, SLOT(updateTime(qint64)));// 创建顶部标签用于显示一些信息topLabel new QLabel(tr(a href \ https://blog.csdn.net/ProgramNovice \ https://blog.csdn.net/ProgramNovice /a));topLabel-setTextFormat(Qt::RichText);topLabel-setOpenExternalLinks(true);topLabel-setAlignment(Qt::AlignCenter);// 创建控制播放进度的滑块Phonon::SeekSlider* seekSlider new Phonon::SeekSlider(mediaObject, this);// 创建包含播放列表图标、显示时间标签和桌面歌词图标的工具栏QToolBar* widgetBar new QToolBar(this);// 显示播放时间的标签timeLabel new QLabel(tr(00:00 / 00:00), this);timeLabel-setToolTip(tr(当前时间 / 总时间));timeLabel-setAlignment(Qt::AlignCenter);timeLabel-setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);// 创建图标用于控制是否显示播放列表QAction* PLAction new QAction(tr(PL), this);PLAction-setShortcut(QKeySequence(F4));PLAction-setToolTip(tr(播放列表(F4)));connect(PLAction, SIGNAL(triggered()), this, SLOT(setPlaylistShown()));// 创建图标用于控制是否显示桌面歌词QAction* LRCAction new QAction(tr(LRC), this);LRCAction-setShortcut(QKeySequence(F2));LRCAction-setToolTip(tr(桌面歌词(F2)));connect(LRCAction, SIGNAL(triggered()), this, SLOT(setLrcShown()));// 添加到工具栏widgetBar-addAction(PLAction);widgetBar-addSeparator();widgetBar-addWidget(timeLabel);widgetBar-addSeparator();widgetBar-addAction(LRCAction);// 创建播放控制动作工具栏QToolBar* toolBar new QToolBar(this);// 播放动作playAction new QAction(this);playAction-setIcon(QIcon(:/images/play.png));playAction-setText(tr(播放(F5)));playAction-setShortcut(QKeySequence(tr(F5)));connect(playAction, SIGNAL(triggered()), this, SLOT(setPaused()));// 停止动作stopAction new QAction(this);stopAction-setIcon(QIcon(:/images/stop.png));stopAction-setText(tr(停止(F6)));stopAction-setShortcut(QKeySequence(tr(F6)));connect(stopAction, SIGNAL(triggered()), mediaObject, SLOT(stop()));// 跳转到上一首动作skipBackwardAction new QAction(this);skipBackwardAction-setIcon(QIcon(:/images/skipBackward.png));skipBackwardAction-setText(tr(上一首(CtrlLeft)));skipBackwardAction-setShortcut(QKeySequence(tr(CtrlLeft)));connect(skipBackwardAction, SIGNAL(triggered()), this, SLOT(skipBackward()));// 跳转到下一首动作skipForwardAction new QAction(this);skipForwardAction-setIcon(QIcon(:/images/skipForward.png));skipForwardAction-setText(tr(下一首(CtrlRight)));skipForwardAction-setShortcut(QKeySequence(tr(CtrlRight)));connect(skipForwardAction, SIGNAL(triggered()), this, SLOT(skipForward()));// 打开文件动作QAction* openAction new QAction(this);openAction-setIcon(QIcon(:/images/open.png));openAction-setText(tr(播放文件(CtrlO)));openAction-setShortcut(QKeySequence(tr(CtrlO)));connect(openAction, SIGNAL(triggered()), this, SLOT(openFile()));// 音量控制部件Phonon::VolumeSlider* volumeSlider new Phonon::VolumeSlider(audioOutput, this);volumeSlider-setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);// 添加到工具栏toolBar-addAction(playAction);toolBar-addSeparator();toolBar-addAction(stopAction);toolBar-addSeparator();toolBar-addAction(skipBackwardAction);toolBar-addSeparator();toolBar-addAction(skipForwardAction);toolBar-addSeparator();toolBar-addWidget(volumeSlider);toolBar-addSeparator();toolBar-addAction(openAction);// 创建主界面布局管理器QVBoxLayout* mainLayout new QVBoxLayout;mainLayout-addWidget(topLabel);mainLayout-addWidget(seekSlider);mainLayout-addWidget(widgetBar);mainLayout-addWidget(toolBar);setLayout(mainLayout);mediaObject-setCurrentSource(Phonon::MediaSource(../myPlayer/music.mp3));
}添加 updateTime(qint64 time) 槽的定义
// 更新 timeLabel 标签显示的播放时间
void MyWidget::updateTime(qint64 time)
{qint64 totalTimeValue mediaObject-totalTime();QTime totalTime(0, (totalTimeValue / 60000) % 60, (totalTimeValue / 1000) % 60);QTime currentTime(0, (time / 60000) % 60, (time / 1000) % 60);QString str currentTime.toString(mm:ss) / totalTime.toString(mm:ss);timeLabel-setText(str);
}添加 setPaused() 槽的定义
// 播放或者暂停
void MyWidget::setPaused()
{// 如果先前处于播放状态那么暂停播放;否则开始播放if (mediaObject-state() Phonon::PlayingState)mediaObject-pause();elsemediaObject-play();
}