qt实现一个简单的播放器

author author     2022-08-10     657

关键词:

ui界面设计如下:

技术分享

2、代码结构

技术分享

3、dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include<QStringList>
#include<QDebug>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    ui->lb_dis->installEventFilter(this);
    pro = new QProcess();
    tp = new QTimer();
    tp1 = new QTimer();
    flag =0;
    flag1 =0;
    music = "libai.avi";
    i=1;
    fullflag = 0;
    musiclist[0]= "libai.avi";
    musiclist[1] = "kjwcbz.avi";
   // connect(pro,SIGNAL(readyReadStandardOutput()),this,SLOT(gettime()));
    connect(tp,SIGNAL(timeout()),this,SLOT(gettime()));
    connect(tp1,SIGNAL(timeout()),this,SLOT(changimage()));
    connect(pro,SIGNAL(finished(int)),this,SLOT(getmusic()));
  //  connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(setlineeditvalue(int)));
    tp1->start(2000);
}

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

void Dialog::on_bt_play_clicked()  //click play
{
    QStringList cmd_list;
    //pro->write("quit
");
    tp->start(100);
    cmd_list<<"/mnt/hgfs/shared/qt/qmyplay/player/"+music;
    cmd_list<<"-wid";
    cmd_list<< QString::number(ui->lb_dis->winId());
    cmd_list<<"-slave";
    cmd_list<<"-quiet";

    pro->start("mplayer",cmd_list);


}

void Dialog::on_bt_pause_clicked()  //click pause
{
    switch (flag) {
    case 1:
    {
        pro->write("pause
");
            tp->start(100);
            flag=0;
            break;
    }
    case 0:
    {
pro->write("pause
");
    tp->stop();
    flag++;
   break;
    }

    //qDebug()<<"pause";
}
}
void Dialog::gettime() //get current and time length
{
    // pro->write("pause
");
     pro->write("get_time_pos
");
     pro->write("get_time_length
");

while(pro->canReadLine())
{
    QString timeinfo = pro->readLine();
    QString timeend = pro->readLine();
   // qDebug()<<timeinfo;
    //qDebug()<<timeend;
    s = timeinfo.section(".",-2,-2);
    s1 = timeend.section(".",-2,-2);
    s = s.section("=",-1,-1);
    s1 = s1.section("=",-1,-1);
  //  qDebug()<<"info"<<s;
  //  qDebug()<<"end"<<s1;
  //  qDebug()<<s;
    int a1,a2,b1,b2;
    a1 = s.toInt()%60;//geiwei
    a2 = s.toInt()/60;//shiwei
    QString ss,ss1,ss2,ss3;
    ss.setNum(a1);
    ss1.setNum(a2);
    b1 = s1.toInt()%60;//geiwei
    b2 = s1.toInt()/60;//shiwei
    ss2.setNum(b1);
    ss3.setNum(b2);
   // ui->horizontalSlider->setMinimumSize(0);
    ui->horizontalSlider->setMaximum(s1.toInt());
    ui->horizontalSlider->setValue(s.toInt());
    ui->lb_current_time_2->setText("00:"+ss3+":"+ss2);
    ui->lb_current_time->setText("00:"+ss1+":"+ss);
}
}

void Dialog::on_bt_input_clicked()  //input music
{
    QDir dir("/mnt/hgfs/shared/qt/qmyplay/player");
    QStringList filelist;
    filelist<<"*.avi"<<"*.mp3";
    QStringList filename = dir.entryList(filelist);
    //if(ui->listWidget->currentItem()==NULL)
    ui->listWidget->addItems(filename);

}

void Dialog::on_bt_input_2_clicked() //delete music
{
    delete ui->listWidget->currentItem();
}

void Dialog::on_bt_speed_clicked()//speed ++
{
    pro->write("seek +5 ");
}

void Dialog::on_bt_speed_2_clicked()//speed --
{
    pro->write("seek -5");
}
void Dialog::sendmsg()
{


}

void Dialog::on_horizontalSlider_sliderMoved(int position)//position
{
    tp->stop();
    pro->write("pause
");
//ui->horizontalSlider->setValue(position);
QString tmp;

   tmp.setNum(position);
   s=tmp;
  // qDebug()<<tmp;
   QString posi ="seek " +tmp+" 2";
   pro->write(posi.toLatin1());
   qDebug()<<posi.toLatin1();
   tp->start(100);
   pro->write("pause");
//qDebug()<<position<<"position";
}



/*void Dialog::on_listWidget_Clicked(const QModelIndex &index)
{
music = ui->listWidget->currentItem()->text();
pro->write("quit
");
QStringList cmd_list;
 tp->start(100);
cmd_list<<"/mnt/hgfs/shared/qt/qmyplay/player/"+music;
cmd_list<<"-wid";
cmd_list<< QString::number(ui->lb_dis->winId());
cmd_list<<"-slave";
cmd_list<<"-quiet";
pro->start("mplayer",cmd_list);
}
*/
/*void Dialog::on_horizontalSlider_sliderPressed()
{
    QString tmp;

       tmp.setNum(ui->horizontalSlider->value());
       qDebug()<<tmp;
       QString posi ="seek" +tmp+" 2";
       pro->write(posi.toLatin1());
}*/

void Dialog::on_listWidget_clicked(const QModelIndex &index)
{
    music = ui->listWidget->currentItem()->text();
    pro->write("quit
");
    on_bt_play_clicked();
    //pro->start();
    //pro->write("quit
");

}

void Dialog::on_bt_speed_3_clicked()//volume ++
{
    pro->write("volume +5");
}

void Dialog::on_bt_speed_4_clicked()//volume --
{
    pro->write("volume -5");
}
void Dialog::changimage()  //change image
{

    //this->resize(715, 423);
    switch (flag1) {
    case 0:
         this->setStyleSheet(QStringLiteral("QDialog{border-image: url(:/new/prefix1/player/t01185f568f2f064f39.jpg);}"));
        flag1++;
        break;
    case 1:
        this->setStyleSheet(QStringLiteral("QDialog{border-image: url(:/new/prefix1/player/t01c952a08ad7577d58.jpg);}"));
        flag1++;
        break;
    case 2:
        this->setStyleSheet(QStringLiteral("QDialog{border-image: url(:/new/prefix1/player/t01f4b009b55efffa08.jpg);}"));
        flag1 = 0;
        break;

    }
}
void Dialog::setlineeditvalue(int value)  //set line value
{
    int pos = ui->horizontalSlider->value();
    QString tmp;

       tmp.setNum(pos);
      qDebug()<<tmp;
       QString posi ="seek" +tmp+" 2";
       pro->write(posi.toLatin1());
       //ui->horizontalSlider->setValue(pos);
        //qDebug()<<ui->horizontalSlider->value();
//toInt
}
void Dialog::getmusic()   //recycle play
{
    // pro->close();
    switch(i)
    {case 1:
        music = musiclist[1];
        i =0;
        break;
    case 0:
        music = musiclist[0];
        i++;
        break;
    }
    qDebug()<<"end";
    qDebug()<<music;

   // on_bt_play_clicked();
      on_bt_play_clicked();
        //pro->start();
    qDebug()<<"end";
}

void Dialog::on_bt_full_clicked()  //full screen button
{
    switch (fullflag) {
    case 0:
        //this->setWindowState(Qt::Dialog);
        this->setWindowFlags(Qt::Dialog);
        this->showFullScreen();
        fullflag++;
        break;
    case 1:
        //this->setWindowFlags(Qt::SubWindow);
        this->showNormal();
        fullflag=0;
        break;
    }

   // qDebug()<<"fi;;";
}

void Dialog::on_bt_prev_clicked()  //prev play
{
    if(music == "libai.avi")
    music = musiclist[1];
    pro->write("quit
");
    on_bt_play_clicked();
}

void Dialog::on_bt_next_clicked()  //next play
{
    if(music == "libai.avi")
    music = musiclist[1];
    pro->write("quit
");
    on_bt_play_clicked();
}
bool Dialog::eventFilter(QObject *obj, QEvent *evt)  //mouse double click and click
{
    if(obj==ui->lb_dis)
    {
        if(evt->type()==QEvent::MouseButtonDblClick)
        {
            switch (fullflag) {
            case 0:
                //this->setWindowState(Qt::Dialog);
                this->setWindowFlags(Qt::Dialog);
                this->showFullScreen();
                fullflag++;
                break;
            case 1:
                //this->setWindowFlags(Qt::SubWindow);
                this->showNormal();
                fullflag=0;
                break;
            }
        }
            if(evt->type() == QEvent::MouseButtonRelease)
            {
                switch (flag) {
                case 1:
                {
                    pro->write("pause
");
                    tp->start(100);
                    flag=0;
                    break;
                }
                case 0:
                {
                    pro->write("pause
");
                    tp->stop();
                    flag++;
                    break;
                }
            }
        }
    }
}

4、main.cpp

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}

dialog.h

 1 #ifndef DIALOG_H
 2 #define DIALOG_H
 3 
 4 #include <QDialog>
 5 #include<QStringList>
 6 #include<QProcess>
 7 #include <QScrollBar>
 8 #include<QAbstractSlider>
 9 #include<QTimer>
10 #include<QDir>
11 namespace Ui {
12 class Dialog;
13 }
14 
15 class Dialog : public QDialog
16 {
17     Q_OBJECT
18 
19 public:
20     explicit Dialog(QWidget *parent = 0);
21     ~Dialog();
22     bool eventFilter(QObject *obj, QEvent *evt);
23 
24 private slots:
25     void on_bt_play_clicked();
26     void gettime();
27     void on_bt_pause_clicked();
28     void sendmsg();
29     void on_bt_input_clicked();
30 
31     void on_bt_input_2_clicked();
32 
33     void on_bt_speed_clicked();
34 
35     void on_bt_speed_2_clicked();
36 
37     //void on_horizontalSlider_sliderMoved(int position);
38 
39     void on_horizontalSlider_sliderMoved(int position);
40     
41    //void on_horizontalSlider_valueChanged(int value);
42 
43   //  void on_listWidget_Clicked(const QModelIndex &index);
44 
45     //void on_horizontalSlider_sliderPressed();
46 
47     void on_listWidget_clicked(const QModelIndex &index);
48 
49     void on_bt_speed_3_clicked();
50     void getmusic();
51     void on_bt_speed_4_clicked();
52     void changimage();
53     void setlineeditvalue(int);
54     void on_bt_full_clicked();
55 
56     void on_bt_prev_clicked();
57 
58     void on_bt_next_clicked();
59 
60 private:
61     Ui::Dialog *ui;
62     QProcess *pro;
63     QAbstractSlider *asp;
64     QTimer *tp,*tp1;
65      QString s,s1,music;
66      int flag,flag1,i,fullflag;
67      QString musiclist[5];
68 
69 };
70 
71 #endif // DIALOG_H

 

在qt中连续播放多首歌曲并实现多个歌曲循环播放

...,就是每当这首歌快结束的时候发射该信号,告诉接下来播放器干嘛,停止播放还是单曲循环或者别的。。。如果是qt5的话,就简单多了,用multimedia模块。分别new一个qmediaplayer和qmediaplaylist对象,qmediaplaylist内置5个音乐播放模式... 查看详情

qt中如何实现一个简单的动画(代码片段)

QT可以实现一下简单的动画,比如运动的时钟闪烁的按钮。动画的实现:(1)创建一个定时器(2)调用QWidget::update()通知界面重绘实现一个按钮闪烁的例子:circlewidget.h#ifndefCIRCLAWIDGET_H#defineCIRCLAWIDGET_H#include<QFrame>#include<QTi... 查看详情

qt简单应用之播放wav声音(代码片段)

对于每一个可视化开发者而言,创建一个可以播放声音的工程或许是必要的,在QT中,给我们提供了比较友好的播放声音的函数类库QSound首先我们需要在工程文件中添加QT+=multimedia然后我们需要在文件头部分引入QSound库文件:#incl... 查看详情

[simpleplayer]实现一个简单的播放器

简单的播放器需要实现一个最基本的功能:播放视频文件。实现这个功能需要包含以下几个步骤:从视频文件中提取视频图像在屏幕上显示视频图像视频帧的同步,也就是保证视频图像在合适的时间在屏幕上显示从视频文件中提... 查看详情

qt制作一个图片播放器

前言:使用qt制作了一个简单的图片播放器,可以播放gif、png等格式图片先来看看播放器的功能(当然是很简陋的,没有很深入的设计):  1、点击图片列表中图片进行播放。  2、自动播放,播放的图片的间隔时... 查看详情

QT (C++) 中的简单声音 (.wav) 播放应用程序

...2012-03-3118:52:11【问题描述】:我是Qt新手,正在尝试编写一个可以规划wav文件的简单qt类。经过一番阅读和环顾后,我编写了课程,代码如下。代码后有问题#include<QtGui/QApplication>#include"playsoun 查看详情

qt5中的seekslider实现

...020:49:53【问题描述】:大家。我正在用qt5重写我的qt4音乐播放器。而且我无法制作正确的搜索滑块,就像在声子中一样。你有实现这部分UI的简单示例吗?更新:这是我的方法://mainwindow.cppconnect(ui->seekSlider,SIGNAL(sliderMoved(int 查看详情

简单的多屏播放器示例(vlc+qt)

简单的多屏播放器示例(vlc+qt)介绍简单的多屏播放器最多同时播放16个视频支持本地文件和rtsp、rtmp等流媒体播放VS2015工程,依赖Qt+VLC练手作品截图下载程序:download.csdn.net/detail/u014755412/9908787源码:github.com/FutaAlice/QtPlayer代码分析... 查看详情

qt中如何使用ffmpeg实现转码和播放

我现在用了Qt做一个媒体播放器,可是视频只支持一种格式播放能不能用Qt+ffmpeg实现多种格式播放(不用SDL)我现在想在播放器上加一个转码功能,点击一个按钮,进入转格式界面选择视频进行转格式,应该怎么做?求大神赐教... 查看详情

qt之调用fftw3实现音频频谱(原理)

一.效果最近在用播放器业界天花板PotPlayer听歌时,发现其频谱跳动非常有趣,如下所示: 于是决定自己实现一个,如下所示:别看功能很简单,但是涉及到的原理还是挺多的,本篇主要是关于原理的总结。  二.频谱... 查看详情

qt实现一个简单的计算器

1、计算器的界面如下图所示dalog.cpp#include"dialog.h"#include"ui_dialog.h"#include<QPushButton>#include<QDebug>#include<QtMath>constchar*a;Dialog::Dialog(QWidget*parent):QDialog(parent),ui(newUi: 查看详情

qt简单的视频播放器(代码片段)

...设置一个不含UI界面的工程取消构建目录因为要引入视频播放器的模块,我们在pro中引入对应的模块因为要引入布局格式,所以我们引入水平布局和垂直布局,对应的.h中引入以下两个头文件同样的,我们要引入视... 查看详情

c++qt实现音视频播放(代码片段)

...放 自己做的时候踩了很多坑 避免以后踩坑故在此记录实现过程 Qt版本5.9 基于C++11 Qt核心组件与附加组件安装时请打钩 否则可能出现项目中缺少视频播放模块的问题1.首先创建一个新项目 并且打开.pro项目设置文件新... 查看详情

用qt的qaudiooutput类播放wav音频文件

用Qt的QAudioOutput类播放WAV音频文件最近有一个项目,需要同时控制4个声卡播放不同的声音,声音文件很简单就是没有任何压缩的wav文件。如果只是播放wav文件,那么Qt里简单的QSound类是最适合的。但是QSound有一个很大的缺陷就是... 查看详情

qt实现简单的密码加密(代码片段)

一.QT实现ASCII码值改变,来修改字符,实现简单加密原作者这种思路可以学习一下QT版本:Qt5.5.1(MSVC2013,32bit)QtCreator版本:QtCreator3.5.1(opensource)系统:win10假设有这样一个场景,一个软件的用户帐号个数很少&#... 查看详情

使用uwp实现一个简单的媒体播放器

...效果        上图是我所做的播放器的效果,比较简单也没有什么特殊的功能。整个播放器大部分都是MediaElement实现的,我自己又添加了选取文件和停止的功能。如图加号是选取一个本地的文件,方块... 查看详情

qt学习笔记——实现①从本地选择播放源②连接数据库③带有播放列表的视频播放器(代码片段)

...;六)——①进度条可拖动、点击②有暂停按钮的视频播放器的基础上构建。2.因为实现的功能有点多,所以讲解的思路和前几篇不太一样了,先不把UI的设计一股脑儿列出来,而是一个功能一个功能的介绍。3.实现... 查看详情

嵌入式qt开发一个音乐播放器(代码片段)

...开发测试。由于Qt是支持跨平台的,因此本篇的音乐播放器,先在Windows上编写调试,功能调好后再通过交叉编译,在Linux板子上测试。在第一篇的开箱介绍中,体验了OK3568板子自带的Qt界面,有视频播放器... 查看详情