只有不想做的,没有做不到的

开发环境:linux QT4.8.2 QTcreator

所有程序截图:

界面设计:

源码献上:mplayer.pro

#————————————————-## Project created by QtCreator 2012-09-14T14:12:00##————————————————-QT+= core guiTARGET = mplayerTEMPLATE = appSOURCES += main.cpp\movieform.cppHEADERS += movieform.hFORMS += movieform.uiRESOURCES +=

movieForm.h

#ifndef MOVIEFORM_H#include <QProcess>#include <QtGui>namespace Ui {class movieForm;}class movieForm : public QWidget{Q_OBJECTpublic: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);elseui->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);elseui->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);elseui->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());}

上帝助自助者。

只有不想做的,没有做不到的

相关文章:

你感兴趣的文章:

标签云: