#include "videoplayer.h"
#include "ui_videoplayer.h"
#include <QFileDialog>
#include <QTime>
#include <QDebug>
#include <QKeyEvent>
VideoPlayer::VideoPlayer(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::VideoPlayer)
{
ui->setupUi(this);
player = new QMediaPlayer(this);
videow = new MyVideoWidget(this);
playlist = new QMediaPlaylist(this);
//为videow安装过滤器 ----- 主窗口
//videow->installEventFilter(this);
//将QVideoWidget加入布局管理器
ui->horizontalLayout->addWidget(videow);
//设置QMediaPlayer的videooutput
player->setVideoOutput(videow);
//设置播放模式
playlist->setPlaybackMode(QMediaPlaylist::Loop);
//设置播放器的播放列表
player->setPlaylist(playlist);
//连接信号和槽
QObject::connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(set_sider(qint64)));
QObject::connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(set_value(qint64)));
//禁止暂停按钮
ui->pushButton_stop_cont->setEnabled(false);
}
VideoPlayer::~VideoPlayer()
{
delete ui;
}
bool VideoPlayer::eventFilter(QObject *watched,QEvent *event)
{
//按键事件
if(event->type()==QEvent::KeyPress){
QKeyEvent *keyevent = dynamic_cast<QKeyEvent *>(event);
//按了Esc,退出全屏
if(keyevent->key()==Qt::Key_Escape){
//恢复播放窗口为子窗口
videow->setWindowFlag(Qt::SubWindow);
//退出全屏
videow->showNormal();
//重设父窗口
videow->setParent(this);
//重新加入布局管理器
ui->horizontalLayout->addWidget(videow);
}
}
//调用基类的过滤器处理函数
return QMainWindow::eventFilter(watched,event);
}
void VideoPlayer::add_Layout(QWidget *w)
{
ui->horizontalLayout->addWidget(w);
}
void VideoPlayer::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
int row = ui->listWidget->currentRow();
playlist->setCurrentIndex(row);
//设置音量
player->setVolume(ui->verticalSlider->value());
player->play();
ui->pushButton_stop_cont->setEnabled(true);
}
//开始播放
void VideoPlayer::on_pushButton_start_clicked()
{
//当选中新的视频文件或者不是暂停状态===>重新播放
if(ui->listWidget->currentRow()!=playlist->currentIndex()||
player->state()!=QMediaPlayer::PausedState){
//指定当前播放文件
int row = ui->listWidget->currentRow();
playlist->setCurrentIndex(row);
//设置音量
player->setVolume(ui->verticalSlider->value());
}
player->play();
ui->pushButton_stop_cont->setEnabled(true);
}
//停止
void VideoPlayer::on_pushButton_stop_cont_clicked()
{
player->pause();
ui->pushButton_stop_cont->setEnabled(false);
}
//暂停
void VideoPlayer::on_pushButton_stop_clicked()
{
player->stop();
ui->pushButton_stop_cont->setEnabled(false);
}
//全屏
void VideoPlayer::on_pushButton_fullscreen_clicked()
{
//把子窗口提升为顶层窗口
videow->setWindowFlag(Qt::Window);
//全屏
videow->showFullScreen();
}
void VideoPlayer::on_pushButton_prev_clicked()
{
int row = ui->listWidget->currentRow();
if(row==0)
row = ui->listWidget->count();
row--;
ui->listWidget->setCurrentRow(row);
on_listWidget_itemDoubleClicked(ui->listWidget->currentItem());
}
void VideoPlayer::on_pushButton_next_clicked()
{
int row = ui->listWidget->currentRow();
if(row==ui->listWidget->count()-1)
row = 0;
else
row++;
ui->listWidget->setCurrentRow(row);
on_listWidget_itemDoubleClicked(ui->listWidget->currentItem());
}
void VideoPlayer::on_pushButton_add_video_clicked()
{
QStringList video_files = QFileDialog::getOpenFileNames(this,"选择视频文件","D:\\GZ20_2\\Qt\\Qt高级资料","*.mp3 *.mp4 *.avi");
//去重
for(int i=0;i<ui->listWidget->count();i++){
for(int j=0;j<video_files.count();j++){
if(ui->listWidget->item(i)->text()==video_files.at(j)){
video_files.removeAt(j);
break;
}
}
}
//如果无添加文件,直接返回
if(video_files.isEmpty())
return;
//添加到listWidget和playlist
for(int i=0;i<video_files.count();i++){
QString file = video_files.at(i);
//把文件加入播放列表
playlist->addMedia(QUrl::fromLocalFile(file));
}
ui->listWidget->addItems(video_files);
//定位
ui->listWidget->setCurrentRow(0);
}
void VideoPlayer::on_pushButton_del_video_clicked()
{
int row = ui->listWidget->currentRow();
//取出一项
QListWidgetItem *item = ui->listWidget->takeItem(row);
if(item){
delete item;
}
//如果删除了正在播放的视频,禁止暂停
if(row==playlist->currentIndex())
ui->pushButton_stop_cont->setEnabled(false);
//从播放列表删除
playlist->removeMedia(row);
}
void VideoPlayer::on_pushButton_clear_video_clicked()
{
ui->listWidget->clear();
//清空播放列表
playlist->clear();
ui->pushButton_stop_cont->setEnabled(false);
}
void VideoPlayer::on_horizontalSlider_sliderMoved(int position)
{
player->setPosition(position);
}
void VideoPlayer::on_verticalSlider_sliderMoved(int position)
{
player->setVolume(position);
//更新显示
ui->label_volume->setText(QString("音量:%1").arg(position));
}
//周期改变函数
void VideoPlayer::set_sider(qint64 duration)
{
qDebug()<<duration;
if(duration!=0){
//设置进度条最大值
ui->horizontalSlider->setRange(0,duration);
QTime t = QTime(duration/1000/60/60,duration/1000/60%60,duration/1000%60);
//显示周期
video_duration = t.toString("hh:mm:ss");
ui->label_duration_position->setText(QString("00:00:00/%1").arg(video_duration));
//显示歌曲切换
ui->listWidget->setCurrentRow(playlist->currentIndex());
}
}
//进度改变
void VideoPlayer::set_value(qint64 position)
{
//更新进度条的值
ui->horizontalSlider->setValue(position);
QTime t = QTime(position/1000/60/60,position/1000/60%60,position/1000%60);
//显示进度
ui->label_duration_position->setText(QString("%1/%2").
arg(t.toString("hh:mm:ss")).arg(video_duration));
}
- 1
- 2
- 3
- 4
- 5
前往页