QT 媒体播放器

 

可以全屏,解决布局问题,时间进度可以显示..代码尽量简单,基本完美,注需要解码包

 

 如果需要QT 基于mplayer媒体播放器 :http://blog.youkuaiyun.com/buafnlin/archive/2011/02/04/6172415.aspx

 

 

 

 

MAINWINDOW.cpp

 

#include "mainwindow.h"

#include "ui_mainwindow.h"
#include <QtCore/QSettings>
#include <QtCore/QTimer>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QBitmap>
#include <QtGui/QLinearGradient>
#include <QtGui/QMouseEvent>
#include <QtGui/QPainter>
#include <QMessageBox>
#include <QKeyEvent>
#include <QSound>
#include "QFileDialog"
#include "qDebug"
#include "phonon"
#include "QLabel"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include  <QWidget>
#include "phonon/VideoWidget"
#include "QTime"
#include <QDockWidget>
#include <QAction>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->widget->installEventFilter(this);
    media = new Phonon::MediaObject;
    //media->setCurrentSource(Phonon::MediaSource("../Puppet.mpg"));
     w1=new QWidget(this);
        w3=new QWidget(this);
        timeLcd=new  QLCDNumber(this);
    vwidget = new Phonon::VideoWidget(w1);
    Phonon::createPath(media, vwidget);
    vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
    aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
    Phonon::createPath(media, aOutput);
//    QLabel *l1 = new QLabel(QString::fromLocal8Bit("播放进度: "));
//    QLabel *l2 = new QLabel(QString::fromLocal8Bit("音量: "));
    volumeSlider = new Phonon::VolumeSlider;
    volumeSlider->setAudioOutput(aOutput);
    volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
    Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider;
    seekSlider->setMediaObject(media);
       timeLcd->display("00:00");
    QVBoxLayout *vLayout = new QVBoxLayout;
    vLayout->addWidget(vwidget);
   vwidget->resize(1024,768);
    w1->setLayout(vLayout);
//     QHBoxLayout *h1=new QHBoxLayout;
//     h1->addWidget(l1);
//     h1->addWidget(seekSlider);
//     h1->addWidget(timeLcd);
//     QHBoxLayout *h2=new QHBoxLayout;
//     h2->addWidget(l2);
//     h2->addWidget(volumeSlider);
//     h2->addWidget(ui->widget_4);
//    QVBoxLayout *vLayout1 = new QVBoxLayout;
//    vLayout1->addLayout(h1);
//        vLayout1->addLayout(h2);
//    w3->setLayout(vLayout1);
// QHBoxLayout *hLayout1= new QHBoxLayout;
// hLayout1->addWidget(w3);
//  QVBoxLayout *vLayout3= new QVBoxLayout;
// vLayout3->addWidget(w1);
//vLayout3->addLayout(hLayout1);
   //vLayout3->addWidget(ui->widget_4);
//  w2=new QWidget(this);
//  w2->setLayout(vLayout3);
this->setCentralWidget(w1);
QDockWidget *shapesDockWidget1 = new QDockWidget(QString::fromLocal8Bit("播放进度"));
shapesDockWidget1->setWidget(seekSlider);
//shapesDockWidget1->setLayout(h2);
//shapesDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea
//                                  | Qt::RightDockWidgetArea);
addDockWidget(Qt::BottomDockWidgetArea, shapesDockWidget1);
QDockWidget *shapesDockWidget2 = new QDockWidget(QString::fromLocal8Bit("播放时间"));
shapesDockWidget2->setWidget(timeLcd);
shapesDockWidget2->setMaximumSize(100,100);
//shapesDockWidget1->setLayout(h2);
//shapesDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea
//                                  | Qt::RightDockWidgetArea);
addDockWidget(Qt::BottomDockWidgetArea, shapesDockWidget2);
QDockWidget *shapesDockWidget3 = new QDockWidget(QString::fromLocal8Bit("播放界面"));
shapesDockWidget3->setWidget(ui->widget_4);
//shapesDockWidget1->setLayout(h2);
//shapesDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea
//                                  | Qt::RightDockWidgetArea);
//addDockWidget(Qt::RightDockWidgetArea, shapesDockWidget3);
addDockWidget(Qt::BottomDockWidgetArea, shapesDockWidget3);
QDockWidget *shapesDockWidget = new QDockWidget(QString::fromLocal8Bit("音量"));
shapesDockWidget->setWidget(volumeSlider);
//shapesDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea
//                                  | Qt::RightDockWidgetArea);
addDockWidget(Qt::BottomDockWidgetArea, shapesDockWidget);
ui->pushButton_5->setEnabled(false);
   ui->pushButton_7->setEnabled(false);
//      QAction *at = new QAction("退出全屏", vwidget);
//   vwidget->addAction(at);
//     vwidget->setAcceptDrops(true);
//     at->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
//  connect(at, SIGNAL(triggered()), vwidget, SLOT(exitFullScreen()));
      QAction *at1 = new QAction("退出全屏", vwidget);
     vwidget->addAction(at1);
     vwidget->setAcceptDrops(true);
     at1->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL+Qt::Key_Return)<< QKeySequence(Qt::Key_MediaStop));
     connect(at1, SIGNAL(triggered()), vwidget,SLOT(exitFullScreen()));
connect(media, SIGNAL(tick(qint64)), this, SLOT(tick(qint64)));
  readSettings();
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::resizeEvent(QResizeEvent*)
{
//    QBitmap maskBitmap(width(), height());
//    maskBitmap.clear();
//    QPainter p(&maskBitmap);
//    p.setBrush(Qt::black);
//    p.drawRoundRect(0, 0, width(), height(), 2, 4);
//    p.end();
//    setMask(maskBitmap);
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
//    if (event->buttons() & Qt::LeftButton  ) {
//       // move(event->globalPos() - m_dragPosition);
//   move(event->globalPos() - m_dragPosition);
//        event->accept();
//    }
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
//   if (event->button() == Qt::LeftButton) {
//  m_dragPosition = event->globalPos() - frameGeometry().topLeft();
////m_dragPosition = event->globalPos() - frameGeometry().topLeft();
////      // ui->widget->move(m_dragPosition);
//       event->accept();
//}
}
void MainWindow::on_pushButton_2_clicked()
{
    this->close();
}
void MainWindow::on_pushButton_3_clicked()
{
    this->showMinimized();
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == ui->widget) {
       if (event->type() == QEvent::MouseButtonPress)  {
           QMouseEvent *ev = static_cast<QMouseEvent *>(event);
                             if (ev->buttons() & Qt::LeftButton)
                         {
                                 m_dragPosition = ev->globalPos() - frameGeometry().topLeft();
                         
                                      ev->accept();
                             }
            return true;
        } else if (event->type() == QEvent::MouseMove){
            QMouseEvent *ev = static_cast<QMouseEvent *>(event);
            if (ev->buttons() & Qt::LeftButton  ) {
               // move(event->globalPos() - m_dragPosition);
           move(ev->globalPos() - m_dragPosition);
                ev->accept();
            }
    }
else {
            return false;
        }
    }
    else if (obj ==  w1)
    {
        if (event->type() == QEvent::MouseButtonPress)  {
            QMouseEvent *ev = static_cast<QMouseEvent *>(event);
                              if (ev->buttons() & Qt::LeftButton)
                          {
                                  vwidget = new Phonon::VideoWidget(this);
                                   vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
                                       vwidget->exitFullScreen();
                              }
    }
    }
    else {
        // pass the event on to the parent class
        return QMainWindow::eventFilter(obj, event);
    }
     return true;
}
void MainWindow::on_pushButton_4_clicked()
{
QString filename=QFileDialog::getOpenFileName(this,QString::fromLocal8Bit("文件类型"),".",QString::fromLocal8Bit("文问类型(*.*)"));
qDebug()<<filename;
  media->setCurrentSource(Phonon::MediaSource(filename));
      media->play();
 this->setWindowTitle(filename);
       ui->pushButton_5->setEnabled(false);
          ui->pushButton_7->setEnabled(true);
           w1->setFocus();
//this->ui->label->setText(filename);
}
void MainWindow::on_pushButton_8_clicked()
{
    QMessageBox::information(this, tr("About Mdiea Player"),
                             tr("ID:Jammy  0.03"));
}
void MainWindow::on_pushButton_clicked()
{
    vwidget->enterFullScreen();
}
void MainWindow::on_pushButton_5_clicked()
{
      media->play();
      ui->pushButton_5->setEnabled(false);
      ui->pushButton_7->setEnabled(true);
}
void MainWindow::on_pushButton_7_clicked()
{
   media->pause();
   ui->pushButton_7->setEnabled(false);
   ui->pushButton_5->setEnabled(true);
}
void MainWindow::on_pushButton_6_clicked()
{
     // media->setCurrentSource(Phonon::MediaSource(this->ui->label->text()));
      media->stop();
  }
void MainWindow::tick(qint64 time)
{
    QTime displayTime(0, (time / 60000) % 60, (time / 1000) % 60);
    timeLcd->display(displayTime.toString("mm:ss"));
}
void MainWindow::keyPressEvent(QKeyEvent *k)
 {
        if(k->key() == Qt::Key_Space)
     {
        if(ui->pushButton_5->isEnabled()==true)
        {
         media->pause();
         ui->pushButton_5->setEnabled(false);
         ui->pushButton_7->setEnabled(true);
     }
        else if(ui->pushButton_5->isEnabled()==false)
        {
    media->play();
             ui->pushButton_5->setEnabled(true);
           ui->pushButton_7->setEnabled(false);
        }
    }
        else if(k->modifiers() == Qt::AltModifier && k->key() == Qt::Key_Return)
                {
                vwidget->enterFullScreen();
                }
//        else if(k->modifiers() == Qt::ShiftModifier && k->key() == Qt::Key_A)
//        {
//        vwidget->enterFullScreen();
//        }
}
void MainWindow::writeSettings()
{
    QSettings settings("Software Inc.", "Icon Editor");
    settings.beginGroup("mainWindow");
    settings.setValue("size", size());
    settings.setValue("state", saveState());
    settings.endGroup();
}
void MainWindow::readSettings()
{
    QSettings settings("Software Inc.", "Icon Editor");
    settings.beginGroup("mainWindow");
    resize(settings.value("size").toSize());
    restoreState(settings.value("state").toByteArray());
    settings.endGroup();
}
void MainWindow::closeEvent(QCloseEvent *ex)
{
   int a= QMessageBox::information(NULL,QString::fromLocal8Bit("对话框"),QString::fromLocal8Bit("是否需要退出"),QString::fromLocal8Bit("确定"),QString::fromLocal8Bit("取消"),NULL,0,-1);
   if(a==0)
   {
       writeSettings();
   ex->accept();
   }
   else if(a==1)
   {
   ex->ignore();
   }
}
****************************************************

MAINWINDOW.H

 

#define MAINWINDOW_H
#include <QMainWindow>
#include <phonon>
#include <QWidget>
#include <QLCDNumber>
namespace Ui {
    class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
     Phonon::MediaObject *media ;
      Phonon::VideoWidget *vwidget;
        Phonon::AudioOutput *aOutput;
       Phonon::VolumeSlider *volumeSlider;
       Phonon::SeekSlider *seekSlider;
private:
    Ui::MainWindow *ui;
       QPoint m_dragPosition;
        protected:
            void resizeEvent(QResizeEvent *event);
                void mouseMoveEvent(QMouseEvent *event);
               void mousePressEvent(QMouseEvent *event);
bool eventFilter(QObject *obj, QEvent *ev);
 QWidget *w1;
  QWidget *w2;
 QWidget *w3;
     QLCDNumber *timeLcd;
private slots:
    void on_pushButton_6_clicked();
    void on_pushButton_7_clicked();
    void on_pushButton_5_clicked();
    void on_pushButton_clicked();
    void on_pushButton_8_clicked();
    void on_pushButton_4_clicked();
    void on_pushButton_3_clicked();
    void on_pushButton_2_clicked();
     void tick(qint64 time);
     void keyPressEvent(QKeyEvent *k);
     void writeSettings();
     void readSettings();
        void closeEvent(QCloseEvent *ex);
};
#endif // MAINWINDOW_H
在网上找了一个别人的旧版本的播放器~自己更改了一天,终于可运行了,希望分享下同共学习; 不过出了少少问题:希望有经验的一起指导下: 运行环境:qt creator +windows 1、原计划是可支持视频播放的,现在只能加载间频(mp3),一加载视频就卡死 2.、自定义的进度条不起作用,不知为什么百分比槽连接不成功 connect(wmp, SIGNAL(PositionChange(double, double)),this, SLOT(Slot_onPositionChange(double, double))); 3、我用的是QAxWidget控件,这个是不是只支持windows的呢?或者还有没其实更好的? /******************************************************************************************* 项目名:QT播放Qt Mediaplayer 工程师:枫儿 完成时间:2009年12月28日 技术支持:嵌入式家园 www.studyarm.cn www.mcupark.com *******************************************************************************************/ #include "playerwindow.h" #include #include #include #include #include #include #include #include PlayerWindow::PlayerWindow() { //setCaption(tr("Media Player")); fileFilters = tr("Video files (*.mpg *.mpeg *.avi *.wmv)\n" //原来字符串换行也可这样用 "Audio files (*.mp3 *.wav)"); updateTimer = 0; setMouseTracking(true); this->wmp = new QAxWidget(this); wmp->setControl("{22D6F312-B0F6-11D0-94AB-0080C74C7E95}"); // wmp->setProperty("ShowControls", QVariant(false, 0)); wmp->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); connect(wmp, SIGNAL(PlayStateChange(int, int)),this, SLOT(Slot_onPlayStateChange(int, int))); connect(wmp, SIGNAL(ReadyStateChange(ReadyStateConstants)),this, SLOT(Slot_onReadyStateChange(ReadyStateConstants))); connect(wmp, SIGNAL(PositionChange(double, double)),this, SLOT(Slot_onPositionChange(double, double))); this->openButton = new QPushButton(tr("&Open")); connect(openButton, SIGNAL(clicked()), this, SLOT(Slot_openFile())); this->playPauseButton = new QPushButton(tr("&Play")); connect(playPauseButton, SIGNAL(clicked()), wmp, SLOT(Play())); this->stopButton = new QPushButton(tr("&Stop")); connect(stopButton, SIGNAL(clicked()), wmp, SLOT(Stop())); this->seekSlider = new QSlider(Qt::Horizontal, this); seekSlider->setEnabled(false); connect(seekSlider, SIGNAL(valueChanged(int)),this, SLOT(Slot_sliderValueChanged(int))); connect(seekSlider, SIGNAL(sliderPressed()),wmp, SLOT(Pause())); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addWidget(openButton); buttonLayout->addWidget(playPauseButton); buttonLayout->addWidget(stopButton); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->addWidget(wmp); mainLayout->addLayout(buttonLayout); mainLayout->addWidget(seekSlider); this->setLayout(mainLayout); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值