
《Windows程序设计》
课程设计报告
学 院: 计算机与信息学院
序 号: 18
姓 名:
学 号:
指导教师:
完成时间 2013 年 12月 30日
一.课程设计题目
音频、视频播放器
二.课程设计内容及功能
2.1.内容
播放器,实现播放本地网络的视音频资源,实现了播放器所需的基本功能,有一定的容错性
2.2功能
1.播放视频音频文件
2.实现播放、暂停、停止、上一集、下一集
3.播放列表
4.添加本地视、音频文件
5.键盘控制快进、快退、音量加、减
6.全屏播放、退出全屏
7.播放网络音视频资源
三.课程设计要求
本播放器应能实现播放器的基本功能,可以通过按钮实现播放、暂停、停止、上一集、下一集,可以添加本地视、音频文件,可以显示播放列表,在输入栏中输入网络播放地址可以实现播放网络资源文件
四.关键技术及相关原理
本播放器界面文件中使用到的组件有QPushButton、QSlider、QTableWidget、QLineEdit。播放器的播放多媒体功能通过Qmediaplayer类来实现;通过QSlider类来显示播放进度、音量及控制播放进度、音量大小;播放列表通过QMediaPlaylist类来实现,可以添加本地影视资源;使用QTableWidget 组件来显示播放列表,可以点击任意资源文件实现播放;通过QLineEdit类来实现网络地址输入框,player->setMedia(QUrl::fromLocalFile(ui->lineEdit->text())) 语句实现播放;使用setIcon(QIcon(""));添加背景图标。
五.设计思路及关键技术解决方法
5.1 设计思路
界面设计:本播放器模仿迅雷播放器的界面构造,只要分为视频显示,播放列表,控制按钮等几块,结构简洁,方便操作。
功能设计:本播放器基本上实现了播放器的基本功能要求,按钮控制播放、暂停,停止,上一集,下一集、添加资源文件,进度条显示和控制播放进度、音量大小,播放类表显示即选择播放资源文件,QLineEdit实现播放网络资源
5.2关键技术解决办法
双击实现全屏:使用bool MainWindow::eventFilter(QObject *o, QEvent *e)创建过滤器,安装过滤器videoOutput->installEventFilter(this);
添加背景图标:
切换播放暂停图标:
if(player->state()==QMediaPlayer::PlayingState)
if(player->state()==QMediaPlayer::PausedState)
六.功能模块及关键源代码实现
该播放器主要功能模块的实现:
6.1 实现播放、暂停、停止、上一首、下一首
播放、暂停:
void MainWindow::on_playorpause_clicked()
{
showtime();
if(playlist->mediaCount()==0)
{
QMessageBox::about(this, tr("提示"), \
tr("播放列表中没有播放资源!"));
return;
}
qDebug() << playlist->currentIndex();
switch (player->state())
{
case QMediaPlayer::PlayingState:
player->pause();
// ui->pushButtonPlay->setChecked(false);
break;
case QMediaPlayer::PausedState:
play();
break;
case QMediaPlayer::StoppedState:
play();
break;
}
}
停止:
void MainWindow::on_stop_clicked()
{
player->stop();
ui->widgetVideo->setBackgroundRole(QPalette::Background);
}
上一集、下一集:
void MainWindow::on_pre_clicked()
{
if(playlist->mediaCount()==0)
{
QMessageBox::about(this, tr("提示"), \
tr("播放列表中没有播放资源!"));
return;
}
if(playlist->currentIndex()==0)
playlist->setCurrentIndex(playlist->mediaCount()-1);
else
{
playlist->setCurrentIndex(playlist->currentIndex()-1);
player->play();
}
}
void MainWindow::on_next_clicked()
{
if(playlist->mediaCount()==0)
{
QMessageBox::about(this, tr("提示"), \
tr("播放列表中没有播放资源!"));
return;
}
playlist->setCurrentIndex((playlist->currentIndex()+1)%playlist->mediaCount());
player->play();
}
6.2 添加本地资源文件
void MainWindow::on_resource_clicked()
{
QString initialName="G:\\\迅雷下载";//QDir::homePath();
QStringList pathList=QFileDialog::getOpenFileNames(this, tr("选择文件"), initialName, tr(".mp3"));
for(int i=0; i if(!path.isEmpty()) { playlist->addMedia(QUrl::fromLocalFile(path)); QString fileName=path.split("\\\\").last(); int rownum=ui->tableWidget->rowCount(); ui->tableWidget->insertRow(rownum); ui->tableWidget->setItem(rownum, 0, new QTableWidgetItem(fileName.split(".").front())); ui->tableWidget->setItem(rownum, 1, new QTableWidgetItem(fileName.split(".").last())); ui->tableWidget->setItem(rownum, 2, new QTableWidgetItem(path)); } } } 6.3键盘控制快进、快退、音量加减 void MainWindow::keyPressEvent(QKeyEvent *e){ switch(e->key()) { case Qt::Key_Up: if(volume<=290) { volume+=10; player->setVolume(volume); ui->slidervolume->setValue(volume); } else { volume=300; player->setVolume(volume); ui->slidervolume->setValue(volume); } break; case Qt::Key_Down: if(volume>=10) { volume-=10; player->setVolume(volume); ui->slidervolume->setValue(volume); } else { volume=0; player->setVolume(volume); ui->slidervolume->setValue(volume); } break; case Qt::Key_Left: if(positions>=5000) { positions-=5000; qDebug() < player->setPosition(positions); } else { positions=0; ui->slider->setValue(positions); player->setPosition(positions); } break; case Qt::Key_Right: if(positions<=durations-5000) { positions+=5000; qDebug()< player->setPosition(positions); } else { positions=0; ui->slider->setValue(positions); player->setPosition(positions); } break; case Qt::Key_Space: if(player->state() == QMediaPlayer::PlayingState) { player->pause(); } else if(player->state() == QMediaPlayer::PausedState) { player->play(); } } } 6.4播放网络资源 void MainWindow::on_go_clicked() { QString input = ui->lineEdit->text(); if(input.isEmpty() || input=="输入播放地址") return; else { player->setMedia(QUrl::fromLocalFile(ui->lineEdit->text())); } } 七.运行结果及演示说明 7.1运行后整体界面 八.总结及心得体会 通过这几个星期的,写这个小程序,明显的感觉到Qt的学习,还不够深,很多东西都是通过网上查阅资料,然后进行编写,通过做这个媒体播放器,这次自己也学了不少的东西。也认识到自己的很多的不足。Qt这方面知识还待加强。 九.参考文献 C++ GUI QT4编程(第二版) 网络查找
