Qt实现一个简单的视频播放器
目录
1 工程配置
1.1 创建新工程
1.2 ui界面配置
1.3 .pro配置
2 代码
2.1 main.c代码
2.2 widget.c
2.3 widget.h
本文主要记述了如何使用Qt编写一个简单的视频播放器,整个示例采用Qt自带组件就可以完成。可以实现视频的播放和暂停等功能。
1 工程配置
1.1 创建新工程
如下步骤,创建一个名为13-video_player_demo的工程文件,选择基于QWidget就可以,带上ui文件。


1.2 ui界面配置
界面就有四个组件:垂直布局、三个按钮

1.3 .pro配置
在.pro文件内加入:
multimedia multimediawidgets
即:
QT += core gui multimedia multimediawidgets
2 代码
2.1 main.c代码
#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
2.2 widget.c
#include "widget.h"
#include "ui_widget.h"
#include <QFileInfo>
#include <QFileDialog>
#include <QDir>
#include <QMessageBox>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建实例化对象player = new QMediaPlayer(this); videoplayer = new QVideoWidget(this);// 将videoplayer添加到verticalLayout里面,不然将单独开个页面ui->verticalLayout->addWidget(videoplayer);// 将videoplayer设置为player的输出player->setVideoOutput(videoplayer);// 当视频状态发送变化时触发connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(OnStateChange(QMediaPlayer::State)));
}Widget::~Widget()
{delete ui;
}void Widget::on_btn_Import_clicked()
{QString strCurrentPath = QDir::homePath();QString stdDlgTitle = "请选择视频文件";QString strFilter = "MP4 File(*.mp4);;All File(*.*)";QString strAllFiles = QFileDialog::getOpenFileName(this, stdDlgTitle,strCurrentPath,strFilter);if(strAllFiles.isEmpty()) {QMessageBox::information(this,"错误","打开视频文件失败,请重新检查",QMessageBox::Yes|QMessageBox::No);return;}QFileInfo fileInfos(strAllFiles);qDebug() << "File info: " << fileInfos.fileName() << ", path: " << fileInfos.filePath();player->setMedia(QUrl::fromLocalFile(strAllFiles));player->play(); // 播放
}void Widget::on_btn_play_clicked()
{player->play(); // 播放
}void Widget::on_btn_pause_clicked()
{player->pause(); // 停止播放
}void Widget::OnStateChange(QMediaPlayer::State state)
{qDebug() << "state change";//播放器状态变化bool isPlaying = (state==QMediaPlayer::PlayingState);ui->btn_play->setEnabled(!isPlaying);ui->btn_pause->setEnabled(isPlaying);
}
2.3 widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QVideoWidget>
#include <QMediaPlayer>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();QVideoWidget *videoplayer;QMediaPlayer *player;private slots:void on_btn_Import_clicked();void on_btn_play_clicked();void on_btn_pause_clicked();void OnStateChange(QMediaPlayer::State state);private:Ui::Widget *ui;
};
#endif // WIDGET_H
3 注意
1 有时候需要在Linux系统上下载想要的视频软件
2 直接从windows上拉个文件到Linux上,可能由于编码原因不能播放
可以在Linux上录一段视频
可以进行转码
相关文章:
Qt实现一个简单的视频播放器
目录 1 工程配置 1.1 创建新工程 1.2 ui界面配置 1.3 .pro配置 2 代码 2.1 main.c代码 2.2 widget.c 2.3 widget.h 本文主要记述了如何使用Qt编写一个简单的视频播放器,整个示例采用Qt自带组件就可以完成。可以实现视频的播放和暂停等功能。 1 工程配置 1.…...
微服务治理新篇章:Eureka中细粒度策略管理实现
微服务治理新篇章:Eureka中细粒度策略管理实现 在微服务架构中,服务的治理和管理是确保系统稳定性和可扩展性的关键。Eureka作为Netflix开源的服务发现框架,提供了基本的服务注册与发现功能。然而,随着微服务规模的扩大和业务需求…...
快排的3种方式
//(前两种时间复杂度为o(n^2) , 最后一种为o(n*logn)public static void swap(int[] arr , int i , int j){arr[i] arr[i] ^arr[j];arr[j] arr[i] ^arr[j];arr[i] arr[i] ^arr[j]; } //使数组中以arr[R]划分,返回循环后arr[R]的所在地 public…...
el-date-picker手动输入日期,通过设置开始时间和阶段自动填写结束时间
需求:根据开始时间,通过填写阶段时长,自动填写结束时间,同时开始时间和节数时间可以手动输入 代码如下: <el-form ref"ruleForm2" :rules"rules2" :model"formData" inline label-po…...
springboot 适配ARM 架构
下载对应的maven https://hub.docker.com/_/maven/tags?page&page_size&ordering&name3.5.3-alpinedocker pull maven:3.5.3-alpinesha256:4c4e266aacf8ea6976b52df8467134b9f628cfed347c2f6aaf9e6aff832f7c45 2、下载对应的jdk https://hub.docker.com/_/o…...
ElementUI el-select 组件动态设置disabled后,高度变更的问题解决办法
问题描述 Vue2 项目在使用 el-select 组件时,动态将disabled变更为了 true,元素的高度发生了变化。 问题原因 通过浏览器开发人员工具面板,发现,组件内的 input 元素被动态设置了height的样式: 在项目中检查后并…...
写个网络爬虫
网络爬虫是一种自动化程序,通过发送HTTP请求并解析HTML等网页内容,获取指定网页数据的工具。下面是一个简单的Python代码示例,用于实现一个基本的网络爬虫: import requests from bs4 import BeautifulSoupdef get_html(url):try…...
模板方法模式的实现
1. 引言: 交易管理系统中的模板方法模式 之前做过一个交易管理系统,其中有一个核心模块是“交易流程管理”,该模块需要处理不同类型的交易,比如期货交易、期权交易和股票交易。在构建交易管理系统的过程中,我们面临了一个核心挑战…...
Redis的计数功能
Redis的学习专栏:http://t.csdnimg.cn/a8cvV 许多应用都会使用Redis作为计数的基本工具,可以实现快速计数、查询缓存的功能,同时数据也可以异步处理。例如:博客浏览,用户每查看一次,就会增加一次的访问量&a…...
WPF学习(7) --MVVM模式
1. MVVM模式概述 MVVM模式由三个主要部分组成: Model(模型):包含应用程序的业务逻辑和数据。通常是数据对象和数据访问层。View(视图):用户界面部分,展示数据并与用户进行交互。通…...
【人工智能】-- 受限玻尔兹曼机
个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉受限玻尔兹曼机 🍈RBM的结构 🍍RBM的架构图 🍍RBM的经典实现 &…...
在 Android 中定义和使用自定义属性
1. 定义自定义属性 首先,我们需要在 res/values/attrs.xml 文件中定义自定义属性。这些属性可以是颜色、尺寸、字符串等。 创建或打开 res/values/attrs.xml 文件,并添加以下内容: <?xml version"1.0" encoding"utf-8&…...
【实战:python-Django发送邮件-短信-钉钉通知】
一 Python发送邮件 1.1 使用SMTP模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Headermsg_from 306334678qq.com # 发送方邮箱 passwd luzdikipwhjjbibf # 填入发送方邮箱的授权码(填入自己的授权码,相当于邮箱…...
Todo List
待整理的笔记,先列出来,防止后面忘记要整理什么内容。一个一个整理: Linux内核ARM架构(v8)的系统调用的实现过程;open()/write()/read()在Linux内核中的详细实现过程,到驱动中注册的操作集的调用过程;文件…...
【Redis】Redis十大类型
文章目录 前言一、string字符串类型二、List列表类型三、 Hash表四、 Set集合五、 ZSet有序集合六、 GEO地理空间七、 HyperLogLog基数统计八、Bitmap位图九、bitfield位域十、 Stream流10.1 队列指令10.2 消费组指令10.3 ACK机制 前言 redis是k-v键值对进行存储,k…...
存储实验:Linux挂载iscsi硬盘与华为OceanStor创建LUN全流程
目录 目的环境规划实验实验流程Centos配置0. 关闭防火墙1. 设置网卡信息2. 配置路由3. iscsiadm连接存储 iSCSI LUN创建(以华为OceanStor为例)验证1. 验证是否成功2. 开启自动挂载 目的 实现Linux连接iscsi硬盘,同时实现开机自启挂载 环境规…...
高可用系统架构设计技术方案:Java架构师视角
在现代互联网环境下,高可用性(High Availability, HA)已成为衡量系统质量的重要指标之一。对于Java架构师而言,设计一套能够保证业务连续性、快速恢复和持续服务的高可用系统架构,是一项复杂而挑战性的任务。本文将从J…...
C++ --> 类和对象(三)
欢迎来到我的Blog,点击关注哦💕 前言 前面已经对类和对象有一定的了解,接下来再次深入的了解一下。 一、深入理解构造函数 构造函数体赋值: 虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能…...
JS【详解】类 class ( ES6 新增语法 )
本质上,类只是一种特殊的函数。 console.log(typeof 某类); //"function"声明类 class 方式 1 – 类声明 class Car {constructor(model, year) {this.model model;this.year year;} }方式 2 – 类表达式 匿名式 const Car class {constructor(mod…...
vue中使用$set方法给对象添加属性
vue中可以使用$set()给对象添加属性,但不是所有的对象都可以使用,vue中api明确说明,它必须用于向响应式对象上添加属性 响应式对象,vue的响应式原理,可以查看:深入响应式原理 — Vue.js ①对象赋值 this…...
RMBG-2.0(BiRefNet)开源抠图工具落地实操:Streamlit双列界面零门槛上手
RMBG-2.0(BiRefNet)开源抠图工具落地实操:Streamlit双列界面零门槛上手 想给产品换个背景,却不会用复杂的PS?想快速处理一批图片素材,又担心在线工具泄露隐私?今天,我们就来聊聊一个…...
万象视界灵坛惊艳效果:CLIP-ViT-L/14在低分辨率图像上的鲁棒性语义解析
万象视界灵坛惊艳效果:CLIP-ViT-L/14在低分辨率图像上的鲁棒性语义解析 1. 平台概览与核心价值 万象视界灵坛是一款基于OpenAI CLIP-ViT-L/14模型构建的多模态智能感知平台。不同于传统视觉识别系统的单调界面,这个平台将复杂的语义对齐过程转化为直观…...
DeepSeek LeetCode 1210. 穿过迷宫的最少移动次数 public int minimumMoves(int[][] grid)
我来分析 LeetCode 1210 “穿过迷宫的最少移动次数” 的解题思路和实现。 问题分析 我们有一条长度为 2 的蛇,需要从起点 (0,0) 和 (0,1)(水平放置)移动到终点 (n-1, n-2) 和 (n-1, n-1)(仍为水平放置)。蛇可以&#x…...
Jimeng LoRA惊艳效果:同一LoRA版本在不同seed下风格稳定性测评
Jimeng LoRA惊艳效果:同一LoRA版本在不同seed下风格稳定性测评 1. 项目简介 今天我们来聊聊一个很有意思的话题:同一个LoRA模型,用不同的随机种子(seed)生成图片,它的风格到底稳不稳定? 为了…...
LFM2.5-1.2B-Thinking-GGUF效果展示:多语言混合prompt响应能力实测
LFM2.5-1.2B-Thinking-GGUF效果展示:多语言混合prompt响应能力实测 1. 模型核心能力概览 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。这个1.2B参数的模型采用GGUF格式,通过llama.cpp运行时实现高…...
深入剖析mini-swe-agent:100行核心代码如何实现高效编程助手
1. 初识mini-swe-agent:极简主义的力量 第一次看到mini-swe-agent的GitHub仓库时,我完全被它的极简设计震撼了。作为一个常年与复杂代码库打交道的开发者,很难想象一个能解决真实编程问题的AI助手,核心逻辑竟然只有100行Python代码…...
SDXL 1.0电影级绘图工坊效果展示:1152x896竖版在手机端全屏展示效果
SDXL 1.0电影级绘图工坊效果展示:1152x896竖版在手机端全屏展示效果 1. 惊艳效果开场:手机端全屏观影体验 想象一下,在手机上打开一张AI生成的图片,画面瞬间充满整个屏幕——没有黑边,没有压缩失真,就像在…...
震惊!Claude Code 藏着 117 个大招,你竟然只用了 3 个?
每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型! 我整个人都傻了! 大家伙平时用 Claude Code,是不是感觉它就一“高级聊天框”? 让他写段代码,它写;让他修个 Bug,它…...
OpenClaw自动化写作对比:千问3.5-35B-A3B-FP8与纯文本模型的产出差异
OpenClaw自动化写作对比:千问3.5-35B-A3B-FP8与纯文本模型的产出差异 1. 为什么需要对比不同模型的写作表现 上周我在用OpenClaw自动生成技术文档时,发现一个有趣的现象:同样的任务指令,交给不同的大模型处理,产出的…...
Unity/Unreal开发者必看:用四元数彻底告别万向死锁,让你的3D角色旋转丝滑起来
Unity/Unreal开发者必看:用四元数彻底告别万向死锁,让你的3D角色旋转丝滑起来 在游戏开发中,角色的旋转控制是一个看似简单却暗藏玄机的技术点。许多开发者都遇到过这样的场景:当角色抬头到90度时,水平旋转突然变得诡异…...
