QT设计实现视频播放器的功能,并移植到开发板上运行

通过QT对mplayer的应用,实现视频播放器的功能,包括开始播放、暂停播放、继续播放、终止播放、播放上一个、播放下一个、添加指定目录下的视频、删除指定视频、清空列表。应用到QFileDialog、QStringList等类,并交叉编译移植到开发板上运行。

界面效果如下图:
在这里插入图片描述


mymplayer.h

#ifndef MYMPLAYER_H
#define MYMPLAYER_H

#include <QWidget>
#include <QProcess>
#include <QListWidgetItem>

QT_BEGIN_NAMESPACE
namespace Ui {
    
     class MyMplayer; }
QT_END_NAMESPACE

class MyMplayer : public QWidget
{
    
    
    Q_OBJECT

public:
    MyMplayer(QWidget *parent = nullptr);
    ~MyMplayer();

private slots:
    void on_pushButton_addvideo_clicked();

    void on_pushButton_play_clicked();

    void on_pushButton_stop_clicked();

    void on_pushButton_pause_clicked();

    void on_pushButton_prev_clicked();

    void on_pushButton_next_clicked();

    void on_pushButton_delete_clicked();

    void on_pushButton_clear_clicked();

    void on_listWidget_itemDoubleClicked();

private:
    Ui::MyMplayer *ui;
    QProcess *p;
    QString current_video;
};
#endif // MYMPLAYER_H



mymplayer.cpp

#include "mymplayer.h"
#include "ui_mymplayer.h"
#include <QFileDialog>

MyMplayer::MyMplayer(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyMplayer)
{
    
    
    ui->setupUi(this);

    p = new QProcess(this);

    ui->pushButton_pause->setEnabled(false);
}

MyMplayer::~MyMplayer()
{
    
    
    delete ui;
}

//添加
void MyMplayer::on_pushButton_addvideo_clicked()
{
    
    
    QStringList video_files = QFileDialog::getOpenFileNames(this,"选择视频文件","/mnt/sd/video","*.mp4 *.avi *wmv");

    //去重
    for(int i=0;i<ui->listWidget->count();i++)
    {
    
    
        for(int j=0;j<video_files.count();j++)
        {
    
    
            if(ui->listWidget->item(i)->text()==video_files.at(j))
            {
    
    
                video_files.removeAt(j);
                break;
            }
        }
    }

    //如果无添加文件,直接返回
    if(video_files.isEmpty())
        return;

    //添加到listWid
    ui->listWidget->addItems(video_files);
    //定位
    ui->listWidget->setCurrentRow(0);
}

//播放
void MyMplayer::on_pushButton_play_clicked()
{
    
    
    //只有没有运行才开始播放
    if(p->state()==QProcess::Running)
    {
    
    
        p->kill();
        p->waitForFinished();
    }

    QString cmd = QString("mplayer");
    QStringList args;//参数
    //记录当前正在播放的视频
    current_video = ui->listWidget->currentItem()->text();
    args<<"-quiet"<<"-slave"<<"-zoom"<<"-x"<<"600"
       <<"-y"<<"360"<<current_video<<"&";

    p->start(cmd,args);

    ui->pushButton_pause->setText("暂停");
    ui->pushButton_pause->setEnabled(true);
}

//停止
void MyMplayer::on_pushButton_stop_clicked()
{
    
    
    p->kill();
    p->waitForFinished();

    ui->pushButton_pause->setText("暂停");
    ui->pushButton_pause->setEnabled(false);
}

//暂停/继续
void MyMplayer::on_pushButton_pause_clicked()
{
    
    
    QString cmd = QString("killall");
    QStringList args;//参数

    if(ui->pushButton_pause->text()=="暂停")
    {
    
    
        args<<"-STOP"<<"mplayer"<<"&";
        ui->pushButton_pause->setText("继续");
    }
    else
    {
    
    
        args<<"-CONT"<<"mplayer"<<"&";
        ui->pushButton_pause->setText("暂停");
    }
    //阻塞执行
    p->execute(cmd,args);
}

void MyMplayer::on_pushButton_prev_clicked()
{
    
    
    int row = ui->listWidget->currentRow();
    if(row == 0)
        row = ui->listWidget->count();
    row--;
    ui->listWidget->setCurrentRow(row);
    p->kill();
    p->waitForFinished();

    QString cmd = QString("mplayer");
    QStringList args;//参数
    //记录当前正在播放的视频
    current_video = ui->listWidget->currentItem()->text();
    args<<"-quiet"<<"-slave"<<"-zoom"<<"-x"<<"600"
       <<"-y"<<"360"<<current_video<<"&";
    p->start(cmd,args);
}

void MyMplayer::on_pushButton_next_clicked()
{
    
    
    int row = ui->listWidget->currentRow();
    if(row == ui->listWidget->count()-1)
        row = 0;
    else
        row++;
    ui->listWidget->setCurrentRow(row);
    p->kill();
    p->waitForFinished();

    QString cmd = QString("mplayer");
    QStringList args;//参数
    //记录当前正在播放的视频
    current_video = ui->listWidget->currentItem()->text();
    args<<"-quiet"<<"-slave"<<"-zoom"<<"-x"<<"600"
       <<"-y"<<"360"<<current_video<<"&";
    p->start(cmd,args);


}

void MyMplayer::on_pushButton_delete_clicked()
{
    
    
    if(current_video == ui->listWidget->currentItem()->text())
    {
    
    
        p->kill();
        p->waitForFinished();
    }

    int row = ui->listWidget->currentRow();

    QListWidgetItem *item = ui->listWidget->takeItem(row);
    if(item)
    {
    
    
        delete item;
        on_pushButton_play_clicked();
    }
}

void MyMplayer::on_pushButton_clear_clicked()
{
    
    
    ui->listWidget->clear();
    on_pushButton_stop_clicked();
}

void MyMplayer::on_listWidget_itemDoubleClicked()
{
    
    
    on_pushButton_play_clicked();
}



main.cpp

#include "mymplayer.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);
    MyMplayer w;
    w.show();
    return a.exec();
}

完整工程代码:https://download.csdn.net/download/weixin_43793181/13498337

猜你喜欢

转载自blog.csdn.net/weixin_43793181/article/details/110824824