Qt在QLabel上實現視頻播放器,帶快進和進度條拖動功能

功能界面:

在這裏插入圖片描述

開發環境:

Qt5.8 + VS2013 + opencv3.1.0
Demo 下載:https://download.csdn.net/download/birenxiaofeigg/12089199

頭文件包含

#include <qfiledialog.h>
#include <QTimer>
#include <qpixmap.h>
#include <qlabel.h>
#include <qdebug.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

打開視頻文件:

	QString deftPath = "E:/OfficeVideos_hiv2018",
		deftSuffic = "Videos(*.avi *.mp4 *.wmv *.mkv *.rmvb *.mpeg);;Alls(*.*)";
	mVideoPath = QFileDialog::getOpenFileName(nullptr, "Open-Video", deftPath, deftSuffic);
	if (mVideoPath.isEmpty())  return;

	ui.edtVideoPath->setText(mVideoPath);

	vc = new VideoCapture;
	String cStr(mVideoPath.toStdString());
	qDebug() << "Video: " << mVideoPath;
	vc->open(cStr);

	QString str;
	if (vc->isOpened())
	{
		str = QString::fromLocal8Bit("視頻讀取成功!");
		mLabel->setText(str);
	}
	else
	{
		str = QString::fromLocal8Bit("視頻讀取失敗!");
		mLabel->setText(str);
		return;
	}
	
	double Ratio = vc->get(CV_CAP_PROP_FPS),//幀率
		wid = vc->get(CV_CAP_PROP_FRAME_WIDTH),//每幀圖像寬度
		heit = vc->get(CV_CAP_PROP_FRAME_HEIGHT);//每幀圖像高度
	
	mFramesCnt = vc->get(cv::CAP_PROP_FRAME_COUNT);//幀數	
	qDebug() << "Ratio: " << Ratio << "Width: " << wid << "Height: " << heit << "count: " << mFramesCnt;
	if (mFramesCnt < 0)
	{
		ui.hsliderVideo->setEnabled(false);
	}
	else
	{
		ui.hsliderVideo->setEnabled(true);
		ui.hsliderVideo->setValue(1);
	}

開始播放

void myPlayer1::on_btnPlay_clicked()
{
	if (!vc) return;

	
	if (mPause)// 暫停
	{
		if (mTimer->isActive())
		{
			mTimer->stop();
			mPause = false;
		}
	}
	else// 播放
	{
		if (!mTimer->isActive())
		{
			mTimer->start();
			mPause = true;
		}
	}
}

快進

// 快進
void myPlayer1::on_btnFast_clicked()
{
	if (!vc) return;

	if (!mPause)  return;

	if (ui.btnFast->text() == QString::fromLocal8Bit("快進"))
	{
		ui.btnFast->setText(QString::fromLocal8Bit("停止快進"));
		mRunFast = true;
		ui.labelFast->setText("2 X");
	}
	else
	{
		ui.btnFast->setText(QString::fromLocal8Bit("快進"));
		mRunFast = false;
		ui.labelFast->setText("1 X");
	}
}

進度條拖動

// 進度條拖動
void myPlayer1::onSliderMoved(int value)
{
	if (vc == nullptr) return;
	qDebug() << "value: " << value;
	double fm = value*mFramesCnt / 100.0;
	vc->set(CV_CAP_PROP_POS_FRAMES,fm); //CV_CAP_PROP_POS_FRAMES
}

Demo 下載:https://download.csdn.net/download/birenxiaofeigg/12089199

發佈了61 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章