QT编写播放器程序

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QProcess>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    //void btnFileOpen_clicked();
    void on_btnFileOpen_clicked();

    void on_btnPlay_clicked();

    void on_btnPrevious_clicked();

    void on_btnNext_clicked();

    void on_dialVoice_valueChanged(int value);

    void on_horizontalSlider_valueChanged(int value);

    void doProcessTimeOut();

private:
    Ui::MainWindow *ui;

    QStringList playList;
    int playIndex;
    QProcess *playProcess;
    int isPlaying;
    QTimer *myTimer;

    void Init();
    void playMovie(const QString filename);
};
#endif // MAINWINDOW_H

------------------------------------------------------

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QFileDialog"

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

    Init();
    //connect(ui->btnFileOpen,&QPushButton::clicked,this,&MainWindow::btnFileOpen_clicked);
}

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

//slots
//void MainWindow::btnFileOpen_clicked()
//{
//    QStringList array = QFileDialog::getOpenFileNames(this,"add videos","/home/l/Videos","video(*.mp4)");
//    if (array.length() <=0) return;
//    playList = array;
//    playIndex = 0;
//    playMovie(playList.at(playIndex));
//}

void MainWindow::on_btnFileOpen_clicked()
{
    QStringList array = QFileDialog::getOpenFileNames(this,"add videos","/home/l/Videos","video(*.mp4)");
    if (array.length() <=0) return;
    playList = array;
    playIndex = 0;
    playMovie(playList.at(playIndex));
}

void MainWindow::on_btnPlay_clicked()
{
    QString cmd = "pause\n";
    switch (isPlaying)
    {
        case 0:
            break;
        case 1:
            isPlaying = 2;
            playProcess->write(cmd.toLatin1());
            ui->btnPlay->setIcon(QIcon(":/new/prefix1/image/icons-start.png"));
            break;
        case 2:
            isPlaying = 1;
            playProcess->write(cmd.toLatin1());
            ui->btnPlay->setIcon(QIcon(":/new/prefix1/image/stop.png"));
            break;
    }
}

void MainWindow::on_btnPrevious_clicked()
{
    playIndex--;
    if (playIndex < 0)
    {
        playIndex = playList.length() -1;
    }
    playMovie(playList.at(playIndex));
}

void MainWindow::on_btnNext_clicked()
{
    playIndex++;
    if (playIndex >= playList.length())
    {
        playIndex = 0;
    }
    playMovie(playList.at(playIndex));
}

void MainWindow::on_dialVoice_valueChanged(int value)
{
    if (isPlaying != 0)
    {
        QString cmd = QString("volume %1 1\n").arg(value);
        playProcess->write(cmd.toLatin1());
    }
}

void MainWindow::on_horizontalSlider_valueChanged(int value)
{
    if (isPlaying != 0)
    {
        QString cmd = QString("seek %1 1\n").arg(value);
        playProcess->write(cmd.toLatin1());
    }
}

void MainWindow::doProcessTimeOut()
{
    QString cmd = "get_percent_pos\n";
    playProcess->write(cmd.toLatin1());
}
//end slots

//function
void MainWindow::Init()
{
    playList.clear();
    playIndex=0;
    playProcess = new QProcess(this);
    isPlaying = 0;

    myTimer = new QTimer(this);
    connect(myTimer,&QTimer::timeout,this,&MainWindow::doProcessTimeOut);
}

void MainWindow::playMovie(const QString filename)
{
    QString program = "/usr/bin/mplayer";
    QStringList arguments;
    arguments << filename;
    arguments << "-slave";
    arguments << "-quiet";
    arguments << "-wid";
    arguments << QString::number(ui->label->winId());
    playProcess->close();
    playProcess->start(program,arguments);
    myTimer->start(1000*1);

    isPlaying = 1;
    ui->btnPlay->setIcon(QIcon(":/new/prefix1/image/stop.png"));

    QString cmd = QString("volume %1 1\n").arg(ui->dialVoice->value());
    playProcess->write(cmd.toLatin1());

    ui->horizontalSlider->setValue(0);
}
//end function

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值