#include "videoplay.h"
#include "ui_videoplay.h"
#include <QDebug>
#include <QTimer>
#include <QAudioOutput>
VideoPlay::VideoPlay(QWidget *parent)
: QDialog(parent)
, ui(new Ui::VideoPlay)
{
ui->setupUi(this);
// setFixedSize(width(),height());
this->ui->horizontalSlider1->setStyleSheet(R"(
QSlider::groove:horizontal {
border: none;
height: 10px;
background-color: lightgray;
border-radius: 5px;
}
QSlider::handle:horizontal {
width: 4px;
margin: -1px 0px -1px -5px;
border-radius: 1px;
background-color: white;
}
QSlider::sub-page:horizontal {
background-color: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #59969b, stop:1 #04e7fa);
border-radius: 5px;
}
)");
this->ui->horizontalSlider_2->setStyleSheet(R"(
QSlider::groove:horizontal {
border: none;
height: 10px;
background-color: lightgray;
border-radius: 5px;
}
QSlider::handle:horizontal {
width: 4px;
margin: -1px 0px -1px -5px;
border-radius: 1px;
background-color: white;
}
QSlider::sub-page:horizontal {
background-color: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #59969b, stop:1 #04e7fa);
border-radius: 5px;
}
)");
///初始化播放器
player = new QMediaPlayer(this);
QGraphicsScene *sence = new QGraphicsScene(this);
ui->graphicsView->setScene(sence);
videoitem = new QGraphicsVideoItem;
videoitem->setFlags(QGraphicsItem::ItemIsMovable|
QGraphicsItem::ItemIsSelectable|
QGraphicsItem::ItemIsFocusable
);
sence->addItem(videoitem);
player->setVideoOutput(videoitem);
// 创建一个 QAudioOutput 实例
QAudioOutput *audioOutput = new QAudioOutput;
// 将 QMediaPlayer 的音频输出重定向到 QAudioOutput
player->setAudioOutput(audioOutput);
//设定最大声
audioOutput->setVolume(1.0);
//控件也设置为最大值
ui->horizontalSlider1->setValue(ui->horizontalSlider1->maximum());
ui->pushButton_pause->setEnabled(false);
ui->pushButton_stop->setEnabled(false);
connect(player,&QMediaPlayer::playbackStateChanged,this,&VideoPlay::onStateChanged);
connect(player,&QMediaPlayer::durationChanged,this,&VideoPlay::onDurationChanged);
connect(player,&QMediaPlayer::positionChanged,this,&VideoPlay::onPositionChanged);
}
VideoPlay::~VideoPlay()
{
delete ui;
}
//打开视频文件
void VideoPlay::on_pushButton_open_clicked()
{
QString strCurrentPath=QDir::homePath();
QString strDlgTitle = "请选择视频文件";
QString strFilter = "MP4 Files(*.mp4);;All Files(*.*)";
//打开文件对象窗口
QString strAllFiles = QFileDialog::getOpenFileName(this,strDlgTitle,strCurrentPath,strFilter);
// QMessageBox::information(this,"提示",strAllFiles,QMessageBox::Yes|QMessageBox::No);
if(!strAllFiles.isNull())
{
QFileInfo info(strAllFiles);
//显示文件名称
ui->label_FileName->setText(info.fileName());
player->setSource(QUrl::fromLocalFile(strAllFiles));
}
}
///播放视频
void VideoPlay::on_pushButton_play_clicked()
{
player->play();
}
//暂停视频
void VideoPlay::on_pushButton_pause_clicked()
{
player->pause();
}
void VideoPlay::on_pushButton_stop_clicked()
{
player->stop();
}
void VideoPlay::showEvent(QShowEvent *event)
{
QWidget::showEvent(event);
}
void VideoPlay::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
videoitem->setSize(QSize(ui->graphicsView->width()-5,ui->graphicsView->height()-5));
qInfo()<<__FUNCTION__;
}
void VideoPlay::on_pushButton_voice_clicked()
{
player->audioOutput()->setMuted(! player->audioOutput()->isMuted());
if( player->audioOutput()->isMuted())
{
ui->pushButton_voice->setText("静音");
}else
{
ui->pushButton_voice->setText("声音");
}
}
void VideoPlay::onStateChanged(QMediaPlayer::PlaybackState state)
{
qInfo()<<state;
ui->pushButton_play->setEnabled(!(state == QMediaPlayer::PlayingState));
ui->pushButton_pause->setEnabled(state == QMediaPlayer::PlayingState);
ui->pushButton_stop->setEnabled(state == QMediaPlayer::PlayingState);
}
void VideoPlay::onDurationChanged(qint64 duration)
{
ui->horizontalSlider_2->setMaximum(duration);
int secs=duration/1000; //秒
int mins=secs/60; //分钟
secs=secs%60; //余数秒
durationtime=QString::asprintf ("%d:%d", mins,secs) ;
ui->label_3->setText(durationtime);
}
void VideoPlay::onPositionChanged(qint64 position)
{
if(ui->horizontalSlider_2->isSliderDown())return;
//文件播放位置变化
ui->horizontalSlider_2->setSliderPosition(position);
int secs=position/1000; //秒
int mins=secs/60; //分钟
secs=secs%60; //余数秒
psitiontime=QString::asprintf ("%d:%d", mins,secs) ;
ui->label_2->setText(psitiontime);
}
void VideoPlay::on_horizontalSlider_2_sliderPressed()
{
int val =ui->horizontalSlider_2->sliderPosition();
player->setPosition(static_cast<qint64>(val));
qInfo()<<val;
}
void VideoPlay::on_horizontalSlider1_valueChanged(int value)
{
qDebug()<<" on_horizontalSlider1_valueChanged 声音="<<value;
float v =static_cast<float>(value)/ui->horizontalSlider1->maximum();
player->audioOutput()->setVolume(v);
}