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;
}
相关文章
|
6月前
|
Web App开发 前端开发 JavaScript
Playwright极速UI自动化实战指南
Playwright告别Selenium痛点,以智能等待、强大选择器、网络拦截与多设备模拟四大利器,提升自动化效率与稳定性。本文通过实战代码详解其加速秘籍,助你构建高效、可靠的UI测试方案。
|
6月前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
424 4
|
5月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体
Playwright MCP结合AI智能体,革新UI回归测试:通过自然语言驱动浏览器操作,降低脚本编写门槛,提升测试效率与覆盖范围。借助快照解析、智能定位与Jira等工具集成,实现从需求描述到自动化执行的闭环,推动测试迈向智能化、民主化新阶段。
|
6月前
|
JavaScript 前端开发 开发者
鸿蒙应用开发从入门到实战(六):ArkTS声明式UI和组件化
鸿蒙开发语言ArkTS在继承了Typescrip语法的基础上,主要扩展了声明式UI开发相关的能力。
323 1
|
7月前
|
传感器 人工智能 JavaScript
Playwright实战:写UI自动化脚本,速度直接起飞
简介: 测试工程师老王因UI自动化问题深夜奋战,反映出传统测试工具的局限性。微软开源的Playwright凭借智能等待、跨域操作、移动端模拟与网络拦截等强大功能,正迅速取代Selenium,成为新一代自动化测试标准。其稳定高效的设计显著降低维护成本,助力企业构建高质量测试流程。
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
886 11
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
12月前
|
开发框架 缓存 自然语言处理
HarmonyOS ArkTS声明式UI开发实战教程
本文深入探讨了ArkTS作为HarmonyOS生态中新一代声明式UI开发框架的优势与应用。首先对比了声明式与命令式开发的区别,展示了ArkTS如何通过直观高效的代码提升可维护性。接着分析了其核心三要素:数据驱动、组件化和状态管理,并通过具体案例解析布局体系、交互组件开发技巧及复杂状态管理方案。最后,通过构建完整TODO应用实战,结合调试优化指南,帮助开发者掌握声明式UI设计精髓,感受ArkTS的独特魅力。文章鼓励读者通过“破坏性实验”建立声明式编程思维,共同推动HarmonyOS生态发展。
633 3
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
1663 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
502 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频

热门文章

最新文章