基于Mplayer的QT视频播放器

开发环境:linux QT4.8.2 QTcreator

所有程序截图:

界面设计:


源码献上:mplayer.pro

#-------------------------------------------------
#
# Project created by QtCreator 2012-09-14T14:12:00
#
#-------------------------------------------------

QT       += core gui

TARGET = mplayer
TEMPLATE = app


SOURCES += main.cpp\
        movieform.cpp

HEADERS  += movieform.h

FORMS    += movieform.ui

RESOURCES +=


movieForm.h

#ifndef MOVIEFORM_H
#include <QProcess>
#include <QtGui>
namespace Ui {
class movieForm;
}

class movieForm : public QWidget
{
    Q_OBJECT
    
public:
    explicit movieForm(QWidget *parent = 0);
    ~movieForm();
    void play(QString fileName);
    
private slots:
    void on_nextBtn_clicked();

    void on_preBtn_clicked();

    void on_addBtn_clicked();

    void on_delBtn_clicked();

    void on_playBtn_clicked();

    void on_stopBtn_clicked();

    void on_timeBtn_clicked();

    void on_speedBtn_clicked();

    void on_list_itemDoubleClicked(QListWidgetItem *item);

    void on_currentlBar_sliderMoved(int value);

    void on_volumeSlider_sliderMoved(int v);
    void dataRecieve();
    void sureBtnClicked();

protected:
    void closeEvent(QCloseEvent *);

private:
        Ui::movieForm *ui;
        QSpinBox *minBox;
        QSpinBox *secBox;
        QString currentPercent;
        QProcess *p;
        QString currentStr;
        QString totalTime;

};

#endif // MOVIEFORM_H

main.cpp

#include <QtGui/QApplication>
#include "movieform.h"
#include<QTextCodec>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
        QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
        QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
        movieForm w;
        w.show();
        return a.exec();

}


movieForm.cpp

#include "movieform.h"
#include "ui_movieform.h"
#include <QtGui>
movieForm::movieForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::movieForm)
{
    ui->setupUi(this);
    setWindowTitle("视频播放器");
    p=new QProcess(this);
    connect(p,SIGNAL(readyReadStandardOutput()),this,SLOT(dataRecieve()));

}

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

void movieForm::on_nextBtn_clicked()
{
    if(ui->list->currentRow()==ui->list->count()-1)
      ui->list->setCurrentRow(0);
    else
      ui->list->setCurrentRow(ui->list->currentRow()+1);
      play(ui->list->currentItem()->text());
      ui->playBtn->setText("暂停");
}

void movieForm::on_preBtn_clicked()
{
    if(ui->list->currentRow()==0)
      ui->list->setCurrentRow(ui->list->count()-1);
    else
      ui->list->setCurrentRow(ui->list->currentRow()-1);
      play(ui->list->currentItem()->text());
      ui->playBtn->setText("暂停");
}

void movieForm::on_addBtn_clicked()
{
    QStringList fileNames=QFileDialog::getOpenFileNames(this,"choose movies","/","Movie (*.m4v *.mp4 *.avi *.wmv *.mpg)");
     if(fileNames.count()!=0)
      ui->list->addItems(fileNames);
}

void movieForm::on_delBtn_clicked()
{
    if(ui->list->currentRow()==-1)
       QMessageBox::warning(this,"提示","未选中项目或列表为空",QMessageBox::Yes);
    else
     ui->list->takeItem(ui->list->currentRow());
}

void movieForm::on_list_itemDoubleClicked(QListWidgetItem *item)
{
    play(item->text());
    ui->playBtn->setText("暂停");
}
void movieForm::play(QString fileName)
{
   QStringList args;
p->kill();
//p=new QProcess(this);
 //connect(p,SIGNAL(readyReadStandardOutput()),this,SLOT(dataRecieve()));
args<<"-slave";
args<<"-quiet";
args<<"-wid"<<QString::number(ui->view->winId(),10);
args<<"-zoom";
args<<"-x";
args<<"370";
args<<"-y";
args<<"335";
args<<"-vo";
args<<"x11";
args<<fileName;
p->start("mplayer",args);
ui->playBtn->setEnabled(true);
ui->stopBtn->setEnabled(true);
}
void movieForm::on_playBtn_clicked()
{

    p->write("pause\n");
    if(ui->playBtn->text()=="播放")
    {

     connect(p,SIGNAL(readyReadStandardOutput()),this,SLOT(dataRecieve()));
     p->write("get_time_length\n");
     p->write("get_time_pos\n");
     p->write("get_percent_pos\n");
      ui->playBtn->setText("暂停");
    }
    else
    {
     disconnect(p,SIGNAL(readyReadStandardOutput()),this,SLOT(dataRecieve()));
      ui->playBtn->setText("播放");
    }
}

void movieForm::on_stopBtn_clicked()
{
    p->write("quit\n");
   ui->timeLabel->clear();
   ui->percentLabel->clear();
}
void movieForm::on_volumeSlider_sliderMoved(int v)
{
  p->write(QString("volume "+QString::number(v)+" 2\n").toUtf8());
}
void movieForm::on_speedBtn_clicked()
{
    double speed=QInputDialog::getDouble(this,"播放速度设置","相对于正常速度倍数:");
    if(speed>0)
    p->write(QString("speed_set "+QString::number(speed)+" 2\n").toUtf8());
}

void movieForm::closeEvent(QCloseEvent *)
{
 p->kill();
}
void movieForm::dataRecieve()
{
 p->write("get_time_length\n");
 p->write("get_time_pos\n");
 p->write("get_percent_pos\n");
   while(p->canReadLine())
{
   QByteArray b=p->readLine();
   if(b.startsWith("ANS_TIME_POSITION"))
   {
   b.replace(QByteArray("\n"),QByteArray(""));
   QString s(b);
   currentStr=s.mid(18);
  ui->currentlBar->setValue(s.mid(18).toFloat());    //更新进度条
   }
   else if((b.startsWith("ANS_LENGTH")))
   {
       b.replace(QByteArray("\n"),QByteArray(""));
    QString s(b);
     totalTime=s.mid(11);
    ui->timeLabel->setText(currentStr+"秒/"+totalTime+"秒  "); //显示时间进度
 ui->currentlBar->setRange(0,s.mid(11).toFloat());
   }
    else if((b.startsWith("ANS_PERCENT_POSITION")))
    {
 b.replace(QByteArray("\n"),QByteArray(""));
     QString s(b);
     currentPercent=s.mid(21);
    ui->percentLabel->setText("("+currentPercent+"%)");
    }
}

}
void movieForm::on_currentlBar_sliderMoved(int value)
{
    p->write(QString("seek "+QString::number(value)+" 2\n").toUtf8());

}

void movieForm::on_timeBtn_clicked()
{
    QDialog *timeDialog=new QDialog(this);
     timeDialog->resize(300,100);
     minBox=new QSpinBox(timeDialog);
   minBox->setGeometry(QRect(20,20,50,30));
     QLabel *minLabel=new QLabel("分",timeDialog);
   minLabel->setGeometry(QRect(80,20,20,30));

     secBox=new QSpinBox(timeDialog);
   secBox->setGeometry(QRect(100,20,50,30));
     QLabel *secLabel=new QLabel("秒",timeDialog);
   secLabel->setGeometry(QRect(150,20,30,30));

   QPushButton *sureBtn=new QPushButton("确定",timeDialog);
   sureBtn->setGeometry(QRect(180,20,70,30));
   connect(sureBtn,SIGNAL(clicked()),this,SLOT(sureBtnClicked()));
   timeDialog->show();
}
void movieForm::sureBtnClicked()
{
  int jumpTime=minBox->value()*60+secBox->value();
  p->write(QString("seek "+QString::number(jumpTime)+" 2\n").toUtf8());
}











  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
MPlayer是一个流行的音频和视频播放器,而Qt是一种跨平台的应用程序框架。结合使用MPlayerQt,可以制作一个功能丰富的音乐播放器。首先,你需要安装QtMPlayer。 关于Qt的安装,你可以参考这个链接:。它提供了Qt的安装教程,你可以按照其中的步骤进行安装。 而对于MPlayer的安装,你可以在终端中使用以下命令进行安装:sudo apt-get install mplayer。这个命令会从软件仓库中下载并安装MPlayer。 一旦你完成了QtMPlayer的安装,你可以开始制作音乐播放器了。你可以参考这个链接:。它提供了使用树莓派3B、QtMPlayer制作音乐播放器的详细步骤。在这个链接中,你将找到关于播放、暂停、上一曲、下一曲和音量调节等功能的实现方法。 如果你需要下载MPlayer的最新源码,你可以访问这个链接:。在这个链接中,你将找到MPlayer的最新版本,并且提供了下载和编译的详细步骤。 总结起来,要制作一个mplayer qt音乐播放器,你需要先安装QtMPlayer,然后按照指引进行配置和开发。希望这些信息对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [树莓派3B qt+mplayer制作音乐播放器(10)](https://blog.csdn.net/qq_41102371/article/details/106305346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示](https://blog.csdn.net/qq21497936/article/details/119991329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值