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

  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Qt实现视频播放器,可以使用Qt的多媒体框架。以下是一个简单的示例,使用QMediaPlayer和QVideoWidget在QLabel上播放视频。 首先,在Qt Creator中创建一个新的Qt Widgets应用程序项目。 然后,打开mainwindow.ui文件并添加一个QLabel小部件。右键单击该小部件并选择"提升为",将其提升为QVideoWidget。 在mainwindow.h文件中,添加以下头文件: #include <QMediaPlayer> #include <QVideoWidget> 还需要在类的私有部分声明QMediaPlayer和QVideoWidget: private: QMediaPlayer *player; QVideoWidget *videoWidget; 在mainwindow.cpp文件的构造函数中,初始化QMediaPlayer和QVideoWidget: player = new QMediaPlayer(this); videoWidget = new QVideoWidget(ui->label); player->setVideoOutput(videoWidget); videoWidget->show(); 在这里,我们将QVideoWidget添加到QLabel中,并将其设置为QMediaPlayer的视频输出。 接下来,我们需要添加一个打开视频文件的按钮。在mainwindow.ui文件中,添加一个QPushButton小部件,并将其文本设置为"Open"。然后,在mainwindow.cpp文件中,连接按钮的clicked()信号到一个槽函数,该函数打开文件对话框并打开所选文件: void MainWindow::on_openButton_clicked() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open Video"), "", tr("Video Files (*.mp4 *.avi *.mkv)")); if (fileName != "") { player->setMedia(QUrl::fromLocalFile(fileName)); player->play(); } } 在这里,我们使用QFileDialog打开文件对话框以选择要播放的视频文件。如果选择了文件,我们使用QMediaPlayer的setMedia()函数将其设置为媒体,并使用play()函数开始播放。 现在,运行应用程序并单击"Open"按钮以选择要播放的视频文件。视频将在QLabel上播放。 此示例仅限于演示如何在QtQLabel实现视频播放器,您可以根据需要一步的定制和功能添加。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值