QT简单的视频播放器

1.功能

选择路径下的固定视频格式文件播放,对应的音频和视频同步播放

2.新建一个不含UI界面的QT工程

特别注意:QT中的路径名不能含中文

 

设置一个不含UI界面的工程

取消构建目录

因为要引入视频播放器的模块,我们在pro中引入对应的模块

因为要引入布局格式,所以我们引入水平布局和垂直布局,对应的.h中引入以下两个头文件

同样的,我们要引入视频播放的头文件,需要在pro中引入对应的模块,然后添加对应的头文件

将需要播放声音的头文件引入

#include <QMediaPlayer>

一切准备就绪,开始视频播放器的设置

--》创建对象。然后在.cpp中的构造函数内进行对象的初始化

 

剩下的步骤在代码中进行中文注释:

.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QHBoxLayout>  //水平布局
#include <QVBoxLayout>  //垂直布局
#include <QVideoWidget> //显示视频
#include <QMediaPlayer> //播放声音
#include <QPushButton>  //按钮
#include <QSlider>      //滑动条
#include <QStyle>       //设置图标
#include <QFileDialog>  //选择文件/文件夹
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
public slots:
    void chooseVideo();
private:
    QMediaPlayer *mediaPlayer;
    QVideoWidget *videoWidget;
    QVBoxLayout *vbox;
    //创建按钮的两个对象:选择视频按钮和开始播放按钮
    QPushButton *chooseBtn,*playBtn;
    //创建进度条/滑块的对象
    QSlider *slider;
};

#endif // WIDGET_H

 .cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //对象实例化
    this->mediaPlayer = new QMediaPlayer(this);
    this->videoWidget = new QVideoWidget(this);
    //设置播放画面的最小窗口
    this->videoWidget->setMinimumSize(400,400);

    //实例化整个窗口的布局---垂直布局
    this->vbox = new QVBoxLayout(this);
    this->setLayout(this->vbox);

    //实例化需要的控件--选择视频按钮
    this->chooseBtn = new QPushButton("选择视频",this);
    //实例化需要的控件--播放按钮--设置图标代替文字
    this->playBtn = new QPushButton(this);
    this->playBtn->setIcon(this->style()->standardIcon(QStyle::SP_MediaPlay));
    //实例化需要的控件--滑块/进度条
    this->slider = new QSlider(this);
    //默认的进度条布局为垂直的,我们修改为水平方向
    this->slider->setOrientation(Qt::Horizontal);

    //实例化一个水平布局,将以上空间放在水平布局内
    QHBoxLayout *hbox = new QHBoxLayout;

    //给水平布局添加控件---顺序固定,依次放置选择视频按钮、播放按钮、进度条
    hbox->addWidget(this->chooseBtn);
    hbox->addWidget(this->playBtn);
    hbox->addWidget(this->slider);

    //将播放窗口和水平布局都添加到垂直布局中
    this->vbox->addWidget(this->videoWidget);
    this->vbox->addLayout(hbox);//布局中添加布局,addLayout();

    //将选择视频对应的按钮和槽函数进行关联
    connect(this->chooseBtn,SIGNAL(clicked()),this,SLOT(chooseVideo()));

}

Widget::~Widget()
{

}

//选择视频的槽函数
void Widget::chooseVideo()
{
    //选择视频,返回一个播放视频的名字
    QString name = QFileDialog::getSaveFileName(this,"选择视频",".","WMV(*.wmv)");
    //设置媒体的声音
    this->mediaPlayer->setMedia(QUrl(name));
    //输出视频画面
    this->mediaPlayer->setVideoOutput(this->videoWidget);
    //播放
    this->mediaPlayer->play();

}

 .pro

#-------------------------------------------------
#
# Project created by QtCreator 2022-12-11T15:14:38
#
#-------------------------------------------------

QT       += core gui multimedia multimediawidgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = day4_videoPlayer
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += \
        main.cpp \
        widget.cpp

HEADERS += \
        widget.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

 最终的视频播放器(简单版)样式如下

------------------------------------------------------------------------------------------------------------------------------------end

 留给读者的问题:

1.在视频播放器中添加声音设置;

2.添加滑动条拖动改变播放对应的进度;

3.将目录下的视频放置在界面中,通过双击实现视频的选择播放;

....

 QT中的类特别多,牢记QT三大护法,对UI界面的绘制和非UI界面的绘制要熟悉,记不住没关系,一定要会找,通过库中的用法去定位自己需要实现的功能,找到对应的类和函数以及其中的枚举,读者在学习时切记要多查阅,多自己实现,QT虽然为我们封装了很多类,如何灵活使用是关键!

加油

猜你喜欢

转载自blog.csdn.net/bx1091182836/article/details/128275073