#include "myplayerwidget.h"
#include "ui_myplayerwidget.h"
MyplayerWidget::MyplayerWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MyplayerWidget)
{
ui->setupUi(this);
this->setWindowTitle("Vnish视频播放器");
InitElement();
}
MyplayerWidget::~MyplayerWidget()
{
delete ui;
}
void MyplayerWidget::InitElement()
{
m_MediaPlayer = new QMediaPlayer();
m_MediaPlaylist = new QMediaPlaylist();
m_VideoWidget = new QVideoWidget();
ui->horizontalLayout_4->addWidget(m_VideoWidget);
QStringList strSpeedlist;
strSpeedlist <<"0.5X"<<"0.8X"<<"1.0X"<<"1.25X"<<"1.5X"<<"2.0X"<<"4.0X";
ui->speed_cbBx->addItems(strSpeedlist);
ui->speed_cbBx->setCurrentText("1.0X");
//安装过滤器
m_VideoWidget->installEventFilter(this);
ui->volume_horizontalSlider->setRange(-1,101);
ui->volume_horizontalSlider->setValue(50);
ui->volumn_label->setText(QString("音量:%1").arg(ui->volume_horizontalSlider->value()));
m_MediaPlayer->setPlaylist(m_MediaPlaylist);
m_MediaPlayer->setVideoOutput(m_VideoWidget);
m_MediaPlayer->setVolume(ui->volume_horizontalSlider->value());
connect(ui->listWidget,&QListWidget::itemDoubleClicked,this,&MyplayerWidget::slot_listWidget_itemDoubleClicked);
connect(ui->play_pBtn,&QPushButton::clicked,this,&MyplayerWidget::slot_play_pBtn_clicked);
connect(ui->stop_pBtn,&QPushButton::clicked,this,&MyplayerWidget::slot_stop_pBtn_clicked);
connect(ui->volume_pBtn,&QPushButton::clicked,this,&MyplayerWidget::slot_volume_pBtn_clicked);
connect(ui->full_pBtn,&QPushButton::clicked,this,&MyplayerWidget::slot_full_pBtn_clicked);
connect(ui->open_pBtn,&QPushButton::clicked,this,&MyplayerWidget::slot_open_pBtn_clicked);
connect(ui->speed_cbBx,&QComboBox::currentTextChanged,this,&MyplayerWidget::slot_speed_cbBx_currentTextChanged);
connect(ui->volume_horizontalSlider,&QSlider::sliderMoved,this,&MyplayerWidget::slot_volume_horizontalSlider_sliderMoved);
connect(ui->progress_horizontalSlider,&QSlider::sliderMoved,this,&MyplayerWidget::slot_progress_horizontalSlider_sliderMoved);
connect(m_MediaPlayer,&QMediaPlayer::durationChanged,this,&MyplayerWidget::slot_MediaPlayer_durationChanged);
connect(m_MediaPlayer,&QMediaPlayer::positionChanged,this,&MyplayerWidget::slot_slot_MediaPlayer_positionChanged);
}
void MyplayerWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(QColor("rgb(171,171,171)"));
painter.drawRect(0,0,width()-1,height()-1);
}
bool MyplayerWidget::eventFilter(QObject *watched, QEvent *event)
{
//鼠标双击退出全屏
if(event->type() == QEvent::MouseButtonDblClick)
{
QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent *>(event);
//恢复成子窗口
m_VideoWidget->setWindowFlag(Qt::SubWindow);
//退出全屏
m_VideoWidget->showNormal();
m_VideoWidget->setParent(this);
ui->horizontalLayout_4->addWidget(m_VideoWidget);
}
return QWidget::eventFilter(watched,event);
}
void MyplayerWidget::slot_play_pBtn_clicked()
{
if(!ui->play_pBtn->text().compare("播放"))
{
m_MediaPlayer->play();
ui->play_pBtn->setText("暂停");
}else
{
m_MediaPlayer->pause();
ui->play_pBtn->setText("播放");
}
}
void MyplayerWidget::slot_stop_pBtn_clicked()
{
m_MediaPlayer->stop();
ui->play_pBtn->setText("播放");
}
void MyplayerWidget::slot_volume_pBtn_clicked()
{
if(!ui->volume_pBtn->text().compare("音量"))
{
ui->volume_pBtn->setText("静音");
ui->volume_horizontalSlider->setValue(0);
m_MediaPlayer->setVolume(0);
}else
{
ui->volume_pBtn->setText("音量");
m_MediaPlayer->setVolume(100);
ui->volume_horizontalSlider->setValue(100);
}
}
//全屏
void MyplayerWidget::slot_full_pBtn_clicked()
{
m_VideoWidget->setFullScreen(true);
}
void MyplayerWidget::slot_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
m_MediaPlaylist->clear();
m_MediaPlayer->stop();
QString strItemText = item->text();
m_MfileNameAndFilePath.value(strItemText);
QUrl url(m_MfileNameAndFilePath.value(strItemText));
m_MediaPlaylist->addMedia(url);
m_MediaPlayer->play();
ui->play_pBtn->setText("暂停");
}
void MyplayerWidget::slot_open_pBtn_clicked()
{
QStringList fileNames = QFileDialog::getOpenFileNames(this,"获取音视频文件",
"./",
"*.mp3 *.mp4 *.avi");
// m_MfileNameAndFilePath.clear();
for(int i = 0;i < fileNames.count();i++)
{
QStringList strSplitList = fileNames.at(i).split("/");
QString str;
for(int j = 0;j < strSplitList.count();j++)
{
str = strSplitList.at(strSplitList.count()-1);
}
m_MfileNameAndFilePath.insert(str,fileNames.at(i));
QListWidgetItem *item = new QListWidgetItem(str);
item->setSizeHint(ITEM_SIZE);
ui->listWidget->insertItem(i,item);
}
}
void MyplayerWidget::slot_volume_horizontalSlider_sliderMoved()
{
if(ui->volume_horizontalSlider->value() == 0)
{
m_MediaPlayer->setVolume(ui->volume_horizontalSlider->value());
ui->volume_pBtn->setText("静音");
}else
{
m_MediaPlayer->setVolume(ui->volume_horizontalSlider->value());
ui->volume_pBtn->setText("音量");
}
ui->volumn_label->setText(QString("音量:%1").arg(ui->volume_horizontalSlider->value()));
}
void MyplayerWidget::slot_progress_horizontalSlider_sliderMoved(int position)
{
m_MediaPlayer->setPosition(position);
}
void MyplayerWidget::slot_speed_cbBx_currentTextChanged(QString strText)
{
QString strSpeedText = strText.replace(QRegExp("X$"), "");
//设置速度 正常速度是1.0
m_MediaPlayer->setPlaybackRate(qreal(strSpeedText.toFloat()));
}
void MyplayerWidget::slot_MediaPlayer_durationChanged(quint64 duration)
{
ui->progress_horizontalSlider->setRange(0,duration); //设置进度条起始值
qDebug()<<"der"<<duration;
m_strVideoDuration = QString("%1:%2:%3").arg(duration/1000/60/60,2,10,QChar('0'))
.arg(duration/1000/60%60,2,10,QChar('0'))
.arg(duration/1000%60,2,10,QChar('0'));
ui->time_label->setText(QString("00:00:00/%1").arg(m_strVideoDuration));
}
void MyplayerWidget::slot_slot_MediaPlayer_positionChanged(quint64 position)
{
ui->progress_horizontalSlider->setValue(position);
ui->time_label->setText(QString("%1:%2:%3/%4").arg(position/1000/60/60,2,10,QChar('0'))
.arg(position/1000/60%60,2,10,QChar('0'))
.arg(position/1000%60,2,10,QChar('0'))
.arg(m_strVideoDuration));
}
评论0