Qt视频播放器

  • 一、设置好ui界面
  • 二、打开文件槽函数
    • 1.QDir::homePath()作用介绍
    • 2.QFileDialog::getOpenFileName()介绍
    • 3.QFileInfo介绍
    • 4.player 指针解释
    • 5.打开文件槽函数完整代码
  • 三、视频播放器初始化
    • 1.QMediaPlayer()函数
    • 2.设置时间间隔的作用
    • 3. QGraphicsScene介绍
    • 4.QGraphicsVideoItem介绍
    • 5.设置视频输出
    • 6.完整代码

一、设置好ui界面

在这里插入图片描述

二、打开文件槽函数

这段代码是一个槽函数,用于响应名为"pushButton_open"的按钮的点击事件。当用户点击该按钮时,会弹出一个文件选择对话框,用户可以选择一个视频文件。

1.QDir::homePath()作用介绍

QString strCurrentPath=QDir::homePath();

QDir::homePath()是Qt框架中的一个静态函数,主要用于获取当前系统用户的主目录路径。

主目录是每个用户在系统中的个人目录,通常包含用户的文档、下载、图片等文件夹。在不同的操作系统上,主目录的路径可能会有所不同。使用QDir::homePath()函数可以方便地获取当前用户主目录的路径,以便后续在该目录下进行文件操作或者设置默认路径。

在给定的代码中,QDir::homePath()函数被用于获取当前系统用户的主目录路径,并将其作为默认的打开文件对话框的初始路径,以方便用户在用户主目录下浏览和选择视频文件。

总之,QDir::homePath()的作用是返回当前系统用户的主目录路径,便于在程序中定位和处理与用户相关的文件。
在这里插入图片描述
为了返回主目录之后,点击打开文件跳转到该目录。

QString strDlgTitle="请选择视频文件";//打开文件对话框标题名称

在这里插入图片描述

QString strFilter="MP4 Files(*.mp4);;ALL Files(*.*)";//打开视频文件过滤器

在这里插入图片描述

QString strAllFiles=QFileDialog::getOpenFileName(this,strDlgTitle,strCurrentPath,strFilter);

QFileDialog::getOpenFileName()是一个静态函数,它显示一个打开文件对话框,并返回用户选择的文件路径。

2.QFileDialog::getOpenFileName()介绍

该函数的原型如下:

QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = QFileDialog::Options())

参数说明:

  • parent:可选参数,指定对话框的父窗口。
  • caption:可选参数,指定对话框的标题。
  • dir:可选参数,指定对话框中打开的文件夹路径。
  • filter:可选参数,指定文件过滤器,用于筛选可显示的文件类型。
  • selectedFilter:可选参数,返回用户选择的文件过滤器。
  • options:可选参数,指定对话框的选项。

函数返回值是一个QString,表示用户选择的文件路径。如果用户取消了选择或者发生了错误,将返回一个空字符串。

在给定的代码中,使用QFileDialog::getOpenFileName()实现了打开文件对话框并获取用户选择的视频文件路径。函数的参数依次为父窗口指针(this),对话框标题(“请选择视频文件”),默认打开的文件夹路径(当前系统目录),文件过滤器(“MP4 Files(.mp4);;ALL Files(.*)”),其余参数使用默认值。函数返回的用户选择的文件路径将存储在strAllFiles`中供后续使用。

总而言之,QFileDialog::getOpenFileName()是一个方便的函数,用于显示文件选择对话框并获取用户选择的文件路径。

3.QFileInfo介绍

 QFileInfo FileInfo(strAllFiles);//获取文件信息ui->label->setText(FileInfo.fileName());

QFileInfo是Qt框架中的一个类,用于获取和操作文件的元信息。

在给定的代码中,QFileInfo的构造函数被用于创建一个QFileInfo对象。构造函数的参数是指定要获取元信息的文件路径,这里使用了变量strAllFiles,该变量应该是之前通过QFileDialog::getOpenFileName()函数获取到的用户选择的文件路径。

通过创建QFileInfo对象,可以方便地获取各种与文件相关的信息,如文件名、文件路径、文件大小、文件创建时间等等。使用QFileInfo对象,可以对文件进行操作并获取其属性。
根据给定的代码,ui->label 是一个指向用户界面中的标签控件的指针。setText()QLabel 类的一个槽函数,用于设置标签控件的文本内容。

在这段代码中,FileInfo.fileName() 用于获取 QFileInfo 对象 FileInfo 中的文件名,然后使用 setText() 将该文件名设置为标签控件 ui->label 的文本内容。

这样,通过以上代码,标签控件的文本内容就会被设置为选择的文件的文件名。

需要注意的是,在执行这段代码之前,需要确保 FileInfo 对象已创建,并且 strAllFiles 变量中存储的是一个有效的文件路径。否则,可能会导致 FileInfo 对象未初始化的错误,或者显示错误的文件名。

4.player 指针解释

player->setMedia(QUrl::fromLocalFile(strAllFiles));
player->play();

在给定的代码中,player 是一个指向媒体播放器对象的指针,通过调用 setMedia() 函数来设置要播放的媒体文件。

setMedia() 函数的参数是 QUrl 类型的对象,可以使用 QUrl::fromLocalFile() 函数将本地文件路径转换成合适的 QUrl 对象。在这里,使用 strAllFiles 变量作为本地文件路径,通过 QUrl::fromLocalFile() 转换成 QUrl 对象。

接下来,调用 player 对象的 play() 函数来开始播放媒体文件。

在这段代码中,假设 player 是一个有效的媒体播放器对象,并且 strAllFiles 存储的是一个有效的本地文件路径。如果文件路径无效或播放器对象未正确初始化,可能会导致播放操作失败。

请确保在执行此代码之前,先创建并初始化了媒体播放器对象,同时检查 strAllFiles 的值是否是一个有效的本地文件路径。

5.打开文件槽函数完整代码


void MainDialog::on_pushButton_open_clicked()
{QString strCurrentPath=QDir::homePath();//获取当前系统目录QString strDlgTitle="请选择视频文件";//打开文件对话框标题名称QString strFilter="MP4 Files(*.mp4);;ALL Files(*.*)";//打开视频文件过滤器QString strAllFiles=QFileDialog::getOpenFileName(this,strDlgTitle,strCurrentPath,strFilter);//QMessageBox::information(this,"提示",strAllFiles,QMessageBox::Yes|QMessageBox::No);//提示if(strAllFiles.isEmpty()){QMessageBox::information(this,"错误","打开视频文件失败,请重新检查",QMessageBox::Yes);return;}QFileInfo FileInfo(strAllFiles);//获取文件信息ui->label->setText(FileInfo.fileName());player->setMedia(QUrl::fromLocalFile(strAllFiles));player->play();
}

三、视频播放器初始化

1.QMediaPlayer()函数

在给定的代码中,player=new QMediaPlayer(this); 实例化了一个 QMediaPlayer 对象,并将其指针赋值给 player

通过 new 运算符创建了一个新的 QMediaPlayer 对象,并将其父对象设置为 this,这意味着 player 对象将成为当前对象的子对象。

QMediaPlayer 是 Qt 框架中用于播放音频和视频的类,它提供了许多功能和方法来控制媒体播放,包括播放、暂停、停止等。

在此代码中,我们创建了一个新的 QMediaPlayer 对象并将其分配给指针 player,以便进一步使用该对象进行媒体播放操作。

需要注意的是,在使用 player 对象之前,需要确保已正确初始化它,并在适当的时候进行媒体文件的设置和播放操作。

2.设置时间间隔的作用

player->setNotifyInterval(2000);//设置播放间隔

setNotifyInterval()QMediaPlayer 类中的一个函数,用于设置通知间隔时间。通知间隔是指播放器发送 positionChanged() 信号的时间间隔。

在给定的代码中,player->setNotifyInterval(2000) 将通知间隔设置为 2000 毫秒,即每隔 2000 毫秒播放器会发送一次 positionChanged() 信号。

positionChanged() 信号在每次播放位置改变时触发,可以用于实时更新播放进度或执行其他与播放位置相关的操作。

请注意,在执行此代码之前,需要确保 player 是有效的 QMediaPlayer 对象。通知间隔的时间可以根据需要进行调整。

3. QGraphicsScene介绍

   QGraphicsScene *sence=new QGraphicsScene(this);ui->graphicsView->setScene(sence);

在给定的代码中,首先通过 new 运算符创建了一个 QGraphicsScene 对象的指针 sence,并将其父对象设置为 this

QGraphicsScene 是 Qt 框架中用于管理绘图项的场景类。它提供了一种组织和管理可视化元素的方式,可以在其中添加和移除绘图项,并进行各种操作和处理。

接下来,通过 ui->graphicsView->setScene(sence); 将创建的 QGraphicsScene 设置为 ui->graphicsView 控件的场景。这样就将场景与图形视图关联起来,从而可以在图形视图中显示场景中的绘图项。

4.QGraphicsVideoItem介绍

videoitem=new QGraphicsVideoItem;videoitem->setSize(QSize(ui->graphicsView->width(),ui->graphicsView->height()));videoitem->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsPathItem::ItemIsSelectable|QGraphicsItem::ItemIsFocusable);

在给定的代码中,首先创建了一个 QGraphicsVideoItem 对象的指针 videoitem

QGraphicsVideoItem 是 Qt 框架中的一个图形项类,用于在场景中显示视频。它继承自 QGraphicsObject 类,并提供了特定于视频的功能。

接下来,通过 videoitem->setSize(QSize(ui->graphicsView->width(),ui->graphicsView->height()))videoitem 的大小设置为和 ui->graphicsView 控件的大小相同。这样可以确保视频项的大小与图形视图匹配。

然后,通过 videoitem->setFlags() 设置了 videoitem 的标志。在给定的代码中,将其设置为可移动、可选择和可获得焦点。这些标志指定了可以对视频项执行的操作,例如拖动、选择、获取焦点等。

需要注意的是,QGraphicsVideoItem 类具有一组默认的标志,因此根据需要设置的标志可以是默认的或不同的。

总结起来,这部分代码创建了一个 QGraphicsVideoItem 对象,并设置了其大小和标志。通过设置正确的大小和标志,可以在图形视图中正确显示和操作视频项。

5.设置视频输出

sence->addItem(videoitem);
player->setVideoOutput(videoitem);

在给定的代码中,sence->addItem(videoitem) 将创建的 videoitem 添加到之前创建的 sence 场景中。这样,视频项将成为场景中的一个绘图项,可以在图形视图中显示。

addItem() 函数用于将绘图项添加到场景中。通过调用 sence->addItem(videoitem),我们将视频项添加到场景中,使其成为场景的一部分。

接下来,player->setVideoOutput(videoitem)videoitem 设置为播放器 player 的视频输出。这意味着,通过设置视频输出,我们将视频内容传递给 videoitem,从而使视频在图形视图中显示。

setVideoOutput()QMediaPlayer 类中的一个函数,用于设置视频输出。通过将 videoitem 作为参数传递给 setVideoOutput(),我们告诉播放器将视频内容输出给 videoitem,以在图形视图中显示。

综上所述,这部分代码将视频项添加到场景中,并将其设置为播放器的视频输出,从而实现了将视频显示在图形视图中的目的。

6.完整代码

MainDialog::MainDialog(QWidget *parent): QDialog(parent), ui(new Ui::MainDialog)
{ui->setupUi(this);//固定窗口尺寸(以用户设计窗口为准)setFixedSize(width(),height());//创建场景//视频播放器的初始化player=new QMediaPlayer(this);player->setNotifyInterval(2000);//设置播放间隔//创建播放场景QGraphicsScene *sence=new QGraphicsScene(this);ui->graphicsView->setScene(sence);videoitem=new QGraphicsVideoItem;videoitem->setSize(QSize(ui->graphicsView->width(),ui->graphicsView->height()));videoitem->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsPathItem::ItemIsSelectable|QGraphicsItem::ItemIsFocusable);sence->addItem(videoitem);player->setVideoOutput(videoitem);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/52258.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能网络框架笔记

目录 TCP粘包、分包惊群断开连接,TCP怎么检测的?大量的close wait,如何解 ?双方同时调用close水平触发和边沿触发的区别 TCP粘包、分包 解决:1.应用层协议头前面pktlen;2.为每一个包加上分隔符;(\r\n&…

Docker网络模型使用详解(2)Docker网络模式

安装Docker时会自动创建3个网络,可以使用docker network ls命令列出这些网络。 [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE ebcfad6f4255 bridge bridge local b881c67f8813 compose_lnmp_lnmp…

逆向时如何找到MingGW(GNU)编译程序的main函数

编译器是MingGW生成的可执行文件的显著特点是, 最终运行ZwContinue后程序就莫名其妙启动了, 也找不到main函数。 为了探究里面究竟怎么回事, 我找到了wrk-v1.2的源码, 其中包含了ZwContinue的实现, 首先先看一下注释, API界面包含了2个参数, 其中让人感兴趣的是PCONTEXT, 这是…

答辩PPT怎么做?在线PPT软件哪个好?

又是一年毕业季,相信很多毕业生都开始准备论文答辩,有些同学正在为论文奋夜苦战,有些则是为论文答辩PPT而烦恼。做PPT要用什么软件好呢?这篇文章就来告诉你。 当下有很多PPT制作工具,其中自然也包括Office三件套。这些…

ClickHouse目录结构

默认安装路径:/var/lib/clickhouse/ 目录结构: 主要介绍metadata和data metadata 其中的default、system及相应的数据库,.sql文件即数据库创建相关sql语句 进入default数据库(默认数据库): 可以看到数据库…

redis数据未到过期时间被删除

1. 问题描述 使用了jeecgboot开发后端代码,代码设置的redis过期时间为24小时,部署使用的宝塔面板,在redis中看到的过期时间也是为24小时,但是并未到过期时间,数据就被删除。 2. 解决办法 观察了一下redis中的数据&a…

【C++】数据结构与算法:常用排序算法

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍常用排序算法。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&#x1…

力扣 1049. 最后一块石头的重量 II

题目来源:https://leetcode.cn/problems/last-stone-weight-ii/description/ C题解(思路来源代码随想录):本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。 …

【JavaEE】Spring Boot - 项目的创建和使用

【JavaEE】Spring Boot 开发要点总结(1) 文章目录 【JavaEE】Spring Boot 开发要点总结(1)1. Spring Boot 的优点2. Spring Boot 项目创建2.1 下载安装插件2.2 创建项目过程2.3 加载项目2.4 启动项目2.5 删除一些没用的文件 3. Sp…

[腾讯云Cloud Studio实战训练营]无门槛使用GPT+Cloud Studio辅助编程完成Excel自动工资结算

目录 前言一、Cloud Studio产品介绍1.1 注册Cloud Studio 二、项目实验2.1 选择合适的开发环境2.2 实验项目介绍2.3 实验步骤三、总结 前言 chatgpt简单介绍: ChatGPT是一种基于GPT的自然语言处理模型,专门用于生成对话式文本。它是OpenAI于2021年发布的&#xff0…

#rust taur运行报错#

场景:在window11系统上运行 tauri桌面莹应用,提示错误。 Visual Studio 2022 生成工具 安装的sdk11 , rust运行模式是stable-x86_64-pc-window-gnu, 运行npm run tauir dev 一致失败,失败信息如下 原因:1:在window11系…

UE4查看加密PAK里边的资源Android/iOS/PC方法

我们经常会需要把1个模型进行减面然后在移动端使用,有时候会出现移动端模型和PC端模型不一致的问题,这时候就需要将移动端的模型和PC端的模型进行对比,找到问题出现的原因,检查Mesh、Normal、UV0、UV1、MaterialId、碰撞等是否一致。 如何打包Pak文件,见这篇文章:UE4打包…