一、概览

二、UI界面

三、工程文件QPlayer.pro

#-------------------------------------------------
#
# Project created by QtCreator 2017-10-09T09:28:10
#
#-------------------------------------------------QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = QPlayer
TEMPLATE = appSOURCES += main.cpp\qplayer.cppHEADERS  += qplayer.hFORMS    += qplayer.ui

四、头文件qplayer.h

#ifndef QPLAYER_H
#define QPLAYER_H#include <QWidget>
#include <QTimer>
#include <QProcess>namespace Ui {
class QPlayer;
}class QPlayer : public QWidget
{Q_OBJECTpublic:explicit QPlayer(QWidget *parent = 0);~QPlayer();private slots:void on_addBt_clicked();void on_deleteBt_clicked();//定时刷新时间 槽函数void update_time();void on_movieList_clicked(const QModelIndex &index);void on_playPauseBt_clicked();void on_pervBt_clicked();void on_nextBt_clicked();void read_data();
private:Ui::QPlayer *ui;QTimer *mtimer;QProcess *mprocess;
};#endif // QPLAYER_H

五、main.cpp

#include "qplayer.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);QPlayer w;w.show();return a.exec();
}

六、qplayer.cpp

#include "qplayer.h"
#include "ui_qplayer.h"
#include <QFileDialog>
#include <QDate>
#include <QTime>
#include <QModelIndex>
#include <QDebug>QPlayer::QPlayer(QWidget *parent) :QWidget(parent),ui(new Ui::QPlayer)
{ui->setupUi(this);//去掉标题栏边框...this->setWindowFlags(this->windowFlags()|Qt::FramelessWindowHint);//定时器初始化,关联信号与槽函数,启动mtimer = new QTimer();connect(mtimer, SIGNAL(timeout()),this, SLOT(update_time()));mtimer->start(1000);//定义Qt中的进程mprocess = new QProcess();//关联进程读取数据信号connect(mprocess,SIGNAL(readyRead()),this, SLOT(read_data()));
}QPlayer::~QPlayer()
{delete ui;
}/** 添加视频到列表中
*/
void QPlayer::on_addBt_clicked()
{QStringList list = QFileDialog::getOpenFileNames(this);ui->movieList->addItems(list);
}/** 删除列表中的视频(记录)
*/
void QPlayer::on_deleteBt_clicked()
{//获取当前选项行号int row = ui->movieList->currentRow();QListWidgetItem *item = ui->movieList->takeItem(row);delete item;
}/** 定时刷新时间槽函数
*/
void QPlayer::update_time()
{ui->dateLb->setText(QDate::currentDate().toString("yyyy-MM-dd"));ui->timeLb->setText(QTime::currentTime().toString("hh:mm:ss"));//定时写获取时间命令mprocess->write("get_time_length\n");//视频总时间mprocess->write("get_time_pos\n");//视频当前时间
}/*
点击播放视频(通过Qt中的进程运行mplayer播放视频)
*/
void QPlayer::on_movieList_clicked(const QModelIndex &index)
{int row  = index.row();//获取视频路径QString mpath = ui->movieList->item(row)->text();//mplayer -slave -quiet -geometry 50:50 -zoom -x 400 -y 350 /mnt/mv.wmv//播放命令格式打包QString cmd = QString("mplayer -slave -quiet -geometry 0:0 -zoom -x %1 -y %2 %3").arg(QString::number(ui->label->width())).arg(QString::number(ui->label->height())).arg(mpath);//启动进程播放//判断进程是否在运行,if(mprocess->state()==QProcess::Running){mprocess->kill();//杀死进程//等待mprocess->waitForFinished();}mprocess->start(cmd);
}/*
播放与暂停  pause
*/
void QPlayer::on_playPauseBt_clicked()
{//Qt与mplayer通信mprocess->write("pause\n");
}void QPlayer::on_pervBt_clicked()
{//获取上一个视频路径int row = ui->movieList->currentRow();//获取当前行号if(row == 0)row = ui->movieList->count()-1;  //把row设置为最下面一个elserow--;//设置当前行ui->movieList->setCurrentRow(row);on_movieList_clicked(ui->movieList->currentIndex());
}void QPlayer::on_nextBt_clicked()
{//获取下一个视频路径int row = ui->movieList->currentRow();//获取当前行号if(row == ui->movieList->count()-1)row = 0;  //把row设置为最下面一个elserow++;//设置当前行ui->movieList->setCurrentRow(row);on_movieList_clicked(ui->movieList->currentIndex());
}/*
读取视频时间数据
*/
void QPlayer::read_data()
{while(mprocess->canReadLine()){//读取时间QString msg = mprocess->readLine();//qDebug()<<msg;//"ANS_LENGTH=238.20\nANS_TIME_POSITION=53.9\n"if(msg.indexOf("ANS_LENGTH=")>=0){msg.remove("ANS_LENGTH=");msg.remove("\n");//把msg秒数转换为hh:mm:ss格式double all = msg.toDouble();int iall = (int)all;//得到总共秒数//设置进度条最大值ui->horizontalSlider->setMaximum(iall);QTime atime(0,0,0);atime = atime.addSecs(iall);ui->allTimeLb->setText(atime.toString("hh:mm:ss"));}if(msg.indexOf("ANS_TIME_POSITION=")>=0){msg.remove("ANS_TIME_POSITION=");msg.remove("\n");//把msg秒数转换为hh:mm:ss格式double pos = msg.toDouble();int ipos = (int)pos;//得到总共秒数//更新进度条ui->horizontalSlider->setValue(ipos);QTime atime(0,0,0);atime = atime.addSecs(ipos);ui->posTimeLb->setText(atime.toString("hh:mm:ss"));}}
}

七、arm开发板效果:

Qt实例:视频播放器相关推荐

  1. Qt FFmpeg视频播放器开发(八):播放器UI改造、高仿QQ影音

      最近把播放器项目进行了更新,决定参照QQ影音的界面进行实现,我现在的实现如下:   下图是真实的QQ影音   相比QQ影音界面,我的实现有一定的差距,主要是控件的配色,以及中间那个动态图,由于没有 ...

  2. QML+Qt音视频播放器

    代码地址 xyygudu/Player: Qt和QML实现了视频播放器和音乐播放器 (github.com) 部分效果展示 实现的功能 视频相关:播放暂停.播放进度调节.音量调节.列表显示指定目录下的 ...

  3. QT视频播放器(windows qt、linux qt 音视频播放器)

    想要更多项目私wo!!! 一.项目简介        这是基于Qt的QMediaPlayer实现的音视频播放器,实现了播放器的常用功能,例如根据播放列表选择播放的音视频,拖动滑块控制音视频播放. 二. ...

  4. Qt FFmpeg视频播放器开发(二):FFmepg基本使用与视频播放

    本篇博客目标:读帧解码显示视频 开始进入ffmepg的开发之旅.音视频的细节知识不统一讲解,我在教程中逐点渗透,容我以雷神的话开篇. 视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议 ...

  5. Qt+Mplayer视频播放器

    用到的工具: Qt5.5.1,msvc2012编译器,Mplayer on windows视频解码器,32位操作系统. 效果图: Qt控制Mplayer的slave模式,Qt负责貌美如花,Mplaye ...

  6. Qt编写视频播放器(vlc内核)

    在研究qt+vlc的过程中,就想直接做个播放器用于独立的项目,vlc还支持硬件加速,不过部分电脑硬件不支持除外.用vlc的内核写播放器就是快,直接调用api就行,逻辑处理和ui展示基本上分分钟的事情, ...

  7. Qt编写视频播放器(支持pbonon/qmediaplayer/ffmpeg/vlc/mpv等多种内核)

    一.前言 花了一年多的时间,终于把这个超级播放器做成了自己想要的架构,用户的需求是一方面,自己架构方面的提升也是一方面,最主要是将界面和解码解耦了,这样才能动态的挂载不同的解码内核到不同的视频监控窗体 ...

  8. Qt + FFmpeg 视频播放器

    一. 环境搭建 1. 下载 QT:window 5.7.0版本 FFmpeg: ffmpeg-20200522-38490cb-win32-dev 注意:这里下载 32位dev版本,要和编译器对应(我 ...

  9. 最新libvlc4.0+Qt设计视频播放器

    一.前言 VLC是一款简单且非常优秀的免费开源软件,所有开源软件的好处他都有,而且是为数不多开源并长期更新维护的播放器,兼容性等各个方面都很好.VLC提供了libvlc库,可以很方便进行二次开发. 稳 ...

  10. 【QT项目——视频播放器——开发】

    播放器项目开发 从设计的角度来说,要减少继承,继承带来的复杂度.调试度.难度较大.扩展性较差 继承多代的话会导致代码更新比较困难 1面向对象的五大原则(降低代码的维护成本) 1.1单一职责 让类尽量单 ...

最新文章

  1. JS计算起点坐标到终点坐标的驾车距离和驾车时间
  2. Solution 19: Fibonacci数列
  3. java webservice用户验证_使用java webservice的.net4.0 web app需要Usernametoken身份验证
  4. 本科,程序员,北京工作两年多,税后12k,出路在哪里?
  5. 设计模式学习笔记——迭代器(Iterator)模式
  6. hyper-v 安装centos7 后,虚拟机无法访问网络。
  7. pythonclasses_Python中的Classes和Metaclasses详解
  8. Java getinteger的用法,Java AtomicInteger类的使用方法详解
  9. 内网穿透软件NPS--客户端NPC SDK交叉编译ARM64位库
  10. [黑苹果]简单修改FB实现显存增加至2048MB修复某些花屏
  11. matlab 计算对数似然相似度
  12. Aggressive cows--二分法思想
  13. 2019高考数学必考知识点,高考数学知识板块
  14. 基于Arch的live系统
  15. python中keys的用法_在Python中用keys()方法返回字典键的教程
  16. Scratch软件编程等级考试四级——20191221
  17. c语言转义字符 xhh,jsj_C语言转义字符和格式控制符参考.pdf
  18. 51单片机STC 89C52RC进阶 – 自制8x8点阵、点亮单颗LED、显示点阵汉字
  19. Paint X for Mac破解教程
  20. Ardunio下的STM32串口通信

热门文章

  1. ubuntu+appium+testng+android真机运行
  2. Python绘图初体验
  3. “未处理System.BadImageFormatException HResult=-2147024885 Message=试图加载格式不正确的程序。 (异常来自 HRESULT:0x800
  4. SAP SD之发货和运输
  5. LinuxCPU性能排查——CPU上下文切换
  6. 7月各国入境政策汇总!
  7. jsonp在html什么作用,使用JSONP 解析HTML网页。
  8. 二叉树的前序中序后序遍历真题
  9. word SaveAs 0x800a1421
  10. Android中的Selector