<Qt>实例:视频播放器

来源:互联网 发布:线切割手动圆形编程 编辑:程序博客网 时间:2024/05/22 03:07

一、概览



二、UI界面



三、工程文件QPlayer.pro

#-------------------------------------------------## Project created by QtCreator 2017-10-09T09:28:10##-------------------------------------------------QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = QPlayerTEMPLATE = 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设置为最下面一个    else        row--;    //设置当前行    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设置为最下面一个    else        row++;    //设置当前行    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开发板效果:


原创粉丝点击