ffmpeg播放器实战(进度条ui)

简介: 进度条ui

1.构造函数:

Progress::Progress(QWidget*parent)
    : QWidget{parent}
{
//setMouseTracking是一个 Qt 框架中的功能,用于启用或禁用鼠标跟踪。当该功能启用时,窗口将会跟踪鼠标的移动,并发送相应的鼠标事件。这样可以实现一些与鼠标相关的交互操作,如鼠标悬停、拖拽等。//在使用时,需要先获取一个 QWidget 对象的指针,然后调用其setMouseTracking方法来设置鼠标跟踪的状态。例如://Widget *widget = new QWidget;//widget->setMouseTracking(true); // 启用鼠标跟踪// 或者禁用鼠标跟踪// widget->setMouseTracking(false);//通过设置setMouseTracking(true)来启用鼠标跟踪,设置setMouseTracking(false)来禁用鼠标跟踪。启用后,当鼠标在该窗口内移动时,窗口将会收到鼠标移动事件,从而可以做出相应的处理。//需要注意的是,setMouseTracking只能用于 QWidget 及其派生类的对象,不能直接用于其他对象。this->setMouseTracking(true);
}

作用:为了开启鼠标追踪效果

2.重绘函数

voidProgress::paintEvent(QPaintEvent*)
{
intwidth=this->width() -2*MY_BORDER_WIDTH;
intheight=this->height();
QPainterpainter(this);
//setRenderHint 是一个用于设置绘图选项的函数。它可以用来改变绘图的外观和性能。//该函数接受两个参数,第一个参数是一个 QPainte n::RenderHint 类型的枚举值,//表示要设置的绘图选项。第二个参数是一个布尔值,表示该选项是否启用。//启用抗锯齿渲染painter.setRenderHint(QPainter::Antialiasing);
//Qt::NoPen是Qt框架中的一个枚举值,它用于指定不使用画笔绘制图形元素。//在绘制图形时,可以使用不同的画笔样式来定义边框线条的样式,包括颜色、宽度和样式等。//当设置为Qt::NoPen时,表示不使用任何画笔,即没有边框线条。//这个枚举值常用于需要绘制无边框的图形元素,//比如绘制填充区域或者背景色等。//通过将画笔设置为Qt::NoPen,可以让图形元素只显示填充效果,而没有边框线条。//在使用Qt进行图形绘制时,可以通过QPainter类的setPen()方法来设置画笔,//其中可以传入Qt::NoPen来指定不使用画笔。painter.setPen(Qt::NoPen);
painter.setBrush(QColor(255,0,0));
painter.drawRect(MY_BORDER_WIDTH, 0, width, height);
if (sliderLength<=0)
return;
painter.setBrush(QColor(255, 165, 50));
painter.drawRect(MY_BORDER_WIDTH, 0, width*sliderValue/sliderLength, height);
}

3.鼠标事件

image.png

voidProgress::dealPos(intpos)
{
//如果长度小于0if (sliderLength<=0)
return;
//宽度intwidth=this->width() -2*MY_BORDER_WIDTH;
if (pos<MY_BORDER_WIDTH)
pos=MY_BORDER_WIDTH;
if (pos>width+MY_BORDER_WIDTH)
pos=width+MY_BORDER_WIDTH;
//分段doublestep= (double)width/sliderLength;
//值doublevalue= (double)(pos-MY_BORDER_WIDTH) /step;
doubleoffset=value-int(value);
intrealValue=int(value);
if (offset-0.5>=0)
realValue++;
if (sliderValue!=realValue) {
sliderValue=realValue;
emitsignalValue(realValue);
this->update();
    }
}

4.其他函数

//设置长度voidProgress::setSliderLength(intvalue)
{
sliderLength=value;
}
voidProgress::setSliderValue(intvalue)
{
//如果不按下if (!pressFlag) {
sliderValue=value;
//QWidget的update()函数是用来更新窗口的显示。//当调用update()函数时,会触发窗口的重绘事件,使窗口进行重新绘制。//这个函数通常用于在程序运行过程中需要更新窗口内容时调用,//比如改变窗口的大小、位置、背景色等。调用update()函数后,//系统会自动调用QWidget的paintEvent()函数进行窗口的重新绘制。this->update();
    }
}
intProgress::getSliderValue()
{
returnsliderValue;
}
//是否按下boolProgress::getPressFlag()
{
returnpressFlag;
}
相关文章
|
26天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
100 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
3月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
68 0
|
3月前
|
前端开发 开发者 开发框架
JSF与Bootstrap,打造梦幻响应式网页!让你的应用跨设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,响应式设计至关重要,以确保不同设备上的良好用户体验。本文探讨了JSF(JavaServer Faces)与Bootstrap框架的结合使用,展示了如何构建响应式网页。JSF是一个基于Java的Web应用框架,提供丰富的UI组件和表单处理功能;而Bootstrap则是一个基于HTML、CSS和JavaScript的前端框架,专注于实现响应式设计。通过结合两者的优势,开发者能够更便捷地创建自适应布局,提升Web应用体验。然而,这种组合也有其局限性,如JSF组件库较小和较高的学习成本等,因此在选择开发框架时需综合考虑具体需求和应用场景。
49 0
|
3月前
|
机器学习/深度学习 编解码 API
【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战
【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战
54 0
|
4月前
|
JavaScript
vue + element UI【实战】音乐播放器/语音条(内含音频的加载、控制,事件监听,信息获取,手机网页阴影的去除等技巧)
vue + element UI【实战】音乐播放器/语音条(内含音频的加载、控制,事件监听,信息获取,手机网页阴影的去除等技巧)
74 1
|
4月前
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
722 1
|
4月前
Element UI 【表格合计】el-table 实战范例 -- 添加单位,自定义计算逻辑
Element UI 【表格合计】el-table 实战范例 -- 添加单位,自定义计算逻辑
419 0
|
4月前
|
JavaScript BI UED
vue + element UI【实战】打字闯关(含按键监听、按键音效、字符匹配、动态样式、结果判定、数据统计、音效获取和剪辑等实用技巧)
vue + element UI【实战】打字闯关(含按键监听、按键音效、字符匹配、动态样式、结果判定、数据统计、音效获取和剪辑等实用技巧)
52 0
|
4天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
1月前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
109 3

热门文章

最新文章