#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QVideoWidget>
#include<QMediaPlaylist>
#include<QMessageBox>
#include<QMediaPlaylist>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
player=new QMediaPlayer(this);//可以多次调用
//用 player指针变量保存对话框的指针,便于之后使用
QVideoWidget *video=new QVideoWidget(this);
ui->verticalLayout->addWidget(video);
player->setVideoOutput(video);
// 创建播放列表
playlist=new QMediaPlaylist(this);
player->setPlaylist(playlist);
// //关联进度条
// connect(player,&QMediaPlayer::positionChanged,this,&MainWindow::updateProgress);
// connect(ui->horizontalSlider,&QSlider::valueChanged,player,&QMediaPlayer::setPosition);
connect(player,&QMediaPlayer::positionChanged,this,&MainWindow::positionupdate);
//播放进度
connect(ui->horizontalSlider,&QSlider::sliderMoved,this,&MainWindow::updatePlayPosition);
//媒体信息的关联
connect(player,&QMediaPlayer::metaDataAvailableChanged,this,&MainWindow::updateMediaInfo);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_horizontalSlider_2_valueChanged(int value)
{
QApplication::beep();//声音
}
#include<QFileDialog>
#include<QMediaPlaylist>
//打开媒体文件
void MainWindow::on_actiondaikaiwenjian_triggered()
{
QStringList slit=QFileDialog::getOpenFileNames(this,"选择媒体文件","c:/","媒体文件(*.mp3 *.mp4 *.mv);;所以文件(*)");
//如果文件路径不为空,设置播放器的媒体
int index=playlist->mediaCount();
foreach(QString s,slit){
playlist->addMedia(QUrl::fromLocalFile(s));
qDebug() << s;
qDebug() << slit;
//添加媒体到tablewidget
QTableWidgetItem *item0=new QTableWidgetItem(QFileInfo(s).fileName());
QTableWidgetItem *item1=new QTableWidgetItem("--:--");
int newRow=ui->tableWidget->rowCount();
ui->tableWidget->insertRow(newRow);
ui->tableWidget->setItem(newRow,0,item0);
ui->tableWidget->setItem(newRow,1,item1);
}
if(slit.size()>0){
playlist->setCurrentIndex(index);
ui->tableWidget->selectColumn(index);
}
}
void MainWindow::playerStart()
{
if(playlist->mediaCount()==0)return;
ui->pushButton->setText("暂停");
if(playlist->currentIndex()!=ui->tableWidget->currentRow()){
playlist->setCurrentIndex(ui->tableWidget->currentRow());
}
player->play();//开始播放
}
//双击播放
void MainWindow::on_tableWidget_doubleClicked(const QModelIndex &index)
{
playerStart();
}
//播放 按钮
void MainWindow::on_pushButton_clicked()
{
if(ui->pushButton->text()=="播放"){
playerStart();
}else if(ui->pushButton->text()=="暂停"){
ui->pushButton->setText("播放");
player->pause();//暂停
}
}
void MainWindow::on_verticalSlider_actionTriggered(int action)
{
connect(ui->verticalSlider,&QSlider::sliderMoved,player,&QMediaPlayer::setVolume);
ui->verticalSlider->setValue(player->volume());
}
void MainWindow::positionupdate(qint64 p)
{
ui->horizontalSlider->setMaximum(player->duration()/1000);
ui->horizontalSlider->setValue(p/1000);
ui->label_2->setText(QString("%1:%2").arg(player->position()/1000/60)
.arg(player->position()/1000%60));
}
//进度条
void MainWindow::updateProgress(int p)
{
ui->horizontalSlider->setMaximum(player->duration());
ui->horizontalSlider->setValue(p);
}
//播放进度调整
void MainWindow::updatePlayPosition(int p)
{
player->setPosition(p*1000);
}
//播放模式
void MainWindow::on_pushButton_2_clicked()
{
if(ui->pushButton_2->text() == "单曲1次")
{
ui->pushButton_2->setText("单曲循环");
playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
}
else if (ui->pushButton_2->text() == "单曲循环")
{
ui->pushButton_2->setText("顺序一次");
playlist->setPlaybackMode(QMediaPlaylist::Sequential);
}
else if (ui->pushButton_2->text() == "顺序一次")
{
ui->pushButton_2->setText("顺序循环");
playlist->setPlaybackMode(QMediaPlaylist::Loop);
}
else if (ui->pushButton_2->text() == "顺序循环")
{
ui->pushButton_2->setText("随机");
playlist->setPlaybackMode(QMediaPlaylist::Random);
}
else if (ui->pushButton_2->text() == "随机")
{
ui->pushButton_2->setText("单曲一次");
playlist->setPlaybackMode(QMediaPlaylist::CurrentItemOnce);
}
else
{
ui->pushButton_2->setText("顺序一次");
playlist->setPlaybackMode(QMediaPlaylist::Sequential);
}
}
//上一首
void MainWindow::on_pushButton_4_clicked()
{
if(playlist->currentIndex()>0)
playlist->previous();
// fname=QFileDialog::getOpenFileName(this,"选择音乐文件");
}
//下一首
void MainWindow::on_pushButton_3_clicked()
{
if(playlist->currentIndex()< playlist->mediaCount()-1);
playlist->next();
}
//媒体信息更新
void MainWindow::updateMediaInfo(bool available)
{
if(available){
QString title=player->metaData("Title").toString();
QString author=player->metaData("Author").toString();
if(!title.isEmpty())
setWhatsThis(title+" - "+author);
else
setWindowTitle(ui->tableWidget->item(playlist->currentIndex(),0)->text());
ui->tableWidget->item(playlist->currentIndex(),1)->setText(QString("%1:%2").
arg(player->duration()/1000/60).arg(player->duration()/1000%60));
}
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
// if(event->type() == QEvent::MouseButtonDblClick){
// QMouseEvent *e = (QMouseEvent*) event ;
// if(e->button() == Qt::LeftButton) {
//}
// if(event->type() == QEvent::MouseButtonDblClick)
// {
// QMouseEvent *e = (QMouseEvent*)event;
// if(e->button()==Qt::LeftButton);
// {
// if(videoWidget->isFullScreen())
// {
// videoWidget->setWindowFlags(Qt::SubWindow);
// videoWidget->showNormal();
// }
// else
// {
// videoWidget->setWindowFlags(Qt::Window);
// videoWidget->showFullScreen();
// }
// return true;
// }
// }
// return false;
}
void MainWindow::on_horizontalSlider_actionTriggered(int action)
{
}

Kj@0121
- 粉丝: 0
- 资源: 1
会员权益专享
最新资源
- 基于Springboot智能热度分析和自媒体推送平台【毕业设计,源码】
- linklist.cpp
- SSA麻雀搜索算法优化长短期记忆神经网络(SSA-LSTM)回归预测(Matlab完整程序和数据)
- 技术篇-【Python可视化】基于Python的数据可视化(一)
- 全国统计用区划代码和城乡划分代码,全国省市县代码
- EPICSSNS-CSS-4.5.0-LINUX 32位版本 EPICS Control System Studio (CS
- Login.java
- 05FrameLayout.xml
- vs_Enterprise (3).exe
- STM32F103VET6单片机 基于SD卡数字相册(JPG)例程-5&7寸(SSD1963)LCD屏例程源码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


