#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));
}
没有合适的资源?快使用搜索试试~ 我知道了~
QT下的简易音视频播放器源码
共6个文件
cpp:2个
user:1个
pro:1个
2星 需积分: 36 9 下载量 182 浏览量
2022-10-16
19:25:48
上传
评论 2
收藏 7KB RAR 举报
温馨提示
通过使用Qt下QMediaPlayer、QVideoWidget、QMediaPlaylist类,实现对音视频的播放、暂停、停止、音量调节,倍速播放、全屏(双击鼠标后可退出全屏)功能。
资源详情
资源评论
资源推荐
收起资源包目录
Myplayer.rar (6个子文件)
Myplayer
myplayerwidget.h 2KB
myplayerwidget.cpp 7KB
main.cpp 191B
myplayerwidget.ui 11KB
Myplayer.pro 1KB
Myplayer.pro.user 22KB
共 6 条
- 1
Vanish,
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1