自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 利用 QOpenGLWidget 实现 GPU 加速视频帧绘制

初始化 OpenGL 上下文利用 QOpenGLWidget 创建一个 OpenGL 上下文,设置背景色、视口和正交投影。纹理上传使用 QOpenGLWidget 内置的方法将 QImage 上传为 OpenGL 纹理。Qt 内部会处理格式转换和缓存,避免重复上传相同内容。固定函数管线绘制利用 OpenGL 固定函数管线(glBegin/glEnd)绘制一个覆盖整个窗口的矩形,设置顶点和对应的纹理坐标。GPU 会自动根据当前绑定的纹理及过滤模式完成缩放和采样。释放资源与更新。

2025-03-21 11:08:21 224

原创 Qt 多线程设计:死循环与信号槽的权衡

信号发送:死循环不影响 emit,音频可以通知视频。信号接收:死循环无事件循环,需用设计 2 或状态检查解决。选择依据:实时性选设计 1,同步和扩展性选设计 2。通过将死循环移到 std::thread,结合 QThread 的事件循环,我实现了音频和视频的高效同步。这种设计既满足了实时性,又提供了灵活性,是音视频播放器的推荐方案。

2025-03-20 22:33:06 1054

原创 解决 FFmpeg 处理 H.264 视频时因分辨率对齐导致的崩溃问题

这个“坑”让我深刻认识到视频处理的复杂性,尤其是分辨率对齐对 FFmpeg 工作流的影响。将宽度对齐到 16 的倍数看似微小的改动,却解决了崩溃问题,并让我对 H.264 的编码细节有了更深的理解。如果你也遇到类似问题,不妨检查一下对齐逻辑——16 的倍数可能是你的救星!希望这篇总结对你有所帮助。如果有其他 FFmpeg 相关的坑,欢迎交流!

2025-03-20 09:15:43 219

原创 解决 开发FFMPEG视频播放器右侧白色线问题

右侧白色线问题是 Qt 视频播放器开发中常见的渲染缺陷,通常由缓冲区对齐、未初始化像素或背景处理不当引起。对齐视频帧宽度并初始化缓冲区。在渲染时清除窗口背景。验证图像转换和缩放逻辑。这些方法不仅适用于本文的场景,也可作为通用的调试和优化手段,适用于其他基于 Qt 和 FFmpeg 的视频应用开发。希望这篇文章能帮助遇到类似问题的开发者快速定位并解决问题!

2025-03-18 13:09:10 200

原创 解决 OBS 截图黑屏问题 —— 确保源处于 Active 和 Showing 状态

在 OBS 插件或二次开发中,很多开发者遇到过这样的问题:本文将详细介绍出现黑屏的原因,并分享一种简单有效的解决方案——通过手动激活源来确保 OBS 渲染出有效帧。

2025-03-16 12:31:41 60

原创 修复 VS2019 .RC 文件中文乱码与 UAC 窗口显示问题

rc资源文件中的中文字符串显示为乱码。UAC 提权对话框不显示正确的产品名称和应用图标。本文将详细分析这些问题的原因,并提供解决方案。

2025-03-12 11:25:06 811

原创 如何为初创公司选择合适的代码签名证书:Sectigo、GlobalSign 和 DigiCert 对比与优化策略

短期:选择 Sectigo EV,结合 Beta 版测试和微软审核,快速建立信任。中期:升级到 GlobalSign,平衡成本与效果。长期:投资 DigiCert,确保与大公司竞争无障碍。关键策略:主动提交微软审核是性价比最高的方法,24-48 小时内可解决 SmartScreen 问题,无需依赖大量下载。对于初创公司,Sectigo 是一个经济实用的起点,通过优化策略和微软支持,完全可以达到与 GlobalSign 或 DigiCert 相似的效果。未来随着业务增长,逐步升级证书是明智之举。

2025-03-09 21:09:26 62

原创 申请软著流程 以及 源代码和操作说明格式

申请软著的总体流程是:注册账号 → 填写申请表 → 准备材料 → 提交申请 → 等待审查 → 拿证。所需核心材料包括申请表、身份证明、源代码和说明书。只要按要求准备材料并规范提交,通常都能顺利通过。建议提前在官网查看最新政策,确保流程和材料要求无变化。源代码和软件说明书没有固定的模板文件,但需要满足页眉(软件名称+版本号)、页码(右上角)、页数与行数的基本要求。源代码偏向技术性,需保持代码的可读性;说明书偏向说明性,需涵盖功能与使用细节。

2025-03-09 11:17:16 925

原创 Qt 坐标体系:逻辑坐标与物理坐标的区别与实践

在 Qt 开发中,逻辑坐标(Logical Coordinates)和物理坐标(Physical Coordinates)是两个至关重要的概念,尤其是在多屏幕、高 DPI 场景下,如何正确使用它们直接影响窗口的显示、绘制精度和用户体验。逻辑坐标是 Qt 默认使用的坐标体系,它与设备的分辨率和 DPI 缩放无关。例如,在 200% DPI 缩放的屏幕上,一个 100×100 的逻辑窗口实际上会占据 200×200 的物理像素,但开发者在代码中仍然使用 100×100 的尺寸。的屏幕上,实际显示区域是。

2025-03-05 21:03:46 170

原创 Qt 的 Lambda 捕获局部变量导致 UI 更新异常的分析与解决

引用捕获(&dotCount)导致 Lambda 访问已失效变量,引发 UI 显示异常。使用值捕获(dotCount)+mutable,让变量变成 Lambda 自己的状态,避免生命周期问题。或者使用类成员变量代替局部变量,确保生命周期足够长。mutable只是让 Lambda 允许修改自身的捕获变量,而不会影响原始变量的存储位置。这个问题不仅仅在 Qt 开发中会出现,在 C++ Lambda 使用时都需要特别注意变量的生命周期,合理选择值捕获或引用捕获,才能确保程序的正确运行。

2025-03-02 20:56:28 95

原创 Qt跨线程信号槽调用:为什么信号不能像普通函数那样调用

这种方式能够保证线程安全,因为传递的参数会被复制到事件队列中,即使发送者的局部变量在发送后被销毁,槽函数仍然能接收到一个有效的数据副本。在 Qt 中,信号与槽机制是一种事件驱动的通信方式,用于对象之间的解耦交互。这些局部变量在调用后被销毁,槽函数接收到的仍然是独立的数据副本。在目标对象所属的线程中执行,而不会在当前线程中同步执行。,确保参数被复制到目标线程的事件队列中,避免生命周期问题。的事件队列中,等待该线程的事件循环来处理。,参数会在调用时被复制,封装为一个事件,事件被放入接收者线程的事件队列中,

2025-02-28 22:06:45 397

原创 音频质量常用设置:从低到高的五个等级

音频质量的选择取决于具体的使用场景和需求。今天,我们将常见的音频质量划分为五个等级,从低到高,并介绍它们的适用场景。44.1 kHz 是 CD 音质的标准,足够满足大多数人的听觉需求。这种质量适用于对音质有较高要求的用户,尤其是在高端耳机或音响系统上播放时,细节更丰富,低音更扎实。无损音频的目标是尽可能保留所有声音细节,但它的文件体积也非常大,适合专业应用或音响发烧友。这类音频的高频部分可能会有损失,但仍然适合播放背景音乐或对音质要求不高的场景。如果你的设备支持,并且你对音质有更高要求,建议选择。

2025-02-28 17:55:31 756

原创 解决 OBS 摄像头源预览与录制冲突问题

方案解决方法适用场景关键优势共用同一个摄像头源预览和录制复用相同的源预览+录制简单场景避免冲突,易于实现OBS 场景共享预览和录制引用同一个需要多个窗口访问摄像头适用于复杂场景在实际应用中,如果只是单个预览窗口 + 录制,直接共用同一个源即可;而如果涉及多个窗口,则推荐使用 OBS 场景嵌套方式,确保多个场景可以共享摄像头源。通过合理的资源管理,我们可以有效解决摄像头源预览与录制冲突的问题,保证流畅的用户体验!

2025-02-27 14:20:03 175

原创 利用 OBS SDK 实现源变换:scale、rot 与 pos 的综合应用

在 OBS 中,每个要显示的源(例如摄像头、图片、窗口捕获等)都会被添加到一个场景中,这个源在场景中的实例就称为“场景项”。场景项不仅包含了源本身的信息,还包含了该源在画布中的位置、缩放、旋转等变换属性。通过调整这些属性,我们可以控制源在最终预览或录制画面中的显示方式。用于设置场景项在 X 轴和 Y 轴方向上的缩放比例。缩放不仅可以用于改变源的大小,还可以实现镜像效果。正值:表示正常的缩放比例。例如 1.0 表示 100% 大小。负值。

2025-02-26 16:54:40 53

原创 解决“error: Tried to call obs_frontend_start_virtualcam with no callbacks!”

开发使用 OBS Studio API 的过程中,遇到了不少挑战,尤其是在使用API 时。通过一段时间的探讨和实验,我们发现一个常见的错误提示:“error: Tried to call obs_frontend_start_virtualcam with no callbacks!” 这表明在调用 OBS 的一些前端 API 之前,必须进行回调类的注册。以下是本次讨论的总结以及如何解决该问题.

2025-02-22 21:55:16 119

原创 Qt QComboBox 下拉列表偏移问题探究:多屏幕与高 DPI 环境下的 bug

如果转换过程中未能正确处理屏幕之间的 DPI 差异,就会导致下拉列表的位置计算出错,从而出现偏移现象。Qt 5.15.2 对于多屏幕和高 DPI 的支持已有改进,但在 QComboBox 下拉列表弹出时,内部对 popup 窗口位置计算的逻辑仍可能存在不足,导致在跨屏时出现位置偏移问题。当用户将窗口拖动到不同 DPI 的屏幕上,点击 QComboBox 弹出下拉列表时,下拉列表的位置与预期不符,出现明显偏移,从而影响用户体验。这种设计虽然保证了下拉列表能够独立显示,但也带来了额外的窗口句柄和坐标计算问题。

2025-02-12 20:59:07 604

原创 获取 Windows 视频时长的正确方式——Windows Shell API 深度解析

在 Qt 开发中,有时需要获取视频文件的时长,最直接的方法是在。的方式,但需要正确初始化 COM、正确绑定。Windows Shell API 使用。等 COM 组件,并需要正确处理。

2025-02-11 20:22:18 422

原创 深入解析 OBS 录制尾部帧缺失问题:软件与硬件编码器的对比及优化策略

OBS 录制尾部视频缺帧的问题主要源于编码与写入过程中缓冲区未能及时刷新。使用软件编码器 libx264 时,由于其编码速度受限,容易在录制停止时丢失最后部分帧数据;而硬件编码器(如 h264_nvenc)利用 GPU 加速,能更快地处理和写入数据,从而大幅降低尾帧缺失的情况。针对这一问题,最佳解决方案是在条件允许时优先采用硬件编码器。如果必须使用 libx264,则需要通过降低编码负荷、调整缓冲设置以及合理规划停止流程来尽量改善这一现象。

2025-02-11 15:01:39 96

原创 Windows 高 DPI 环境下,(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough) 时出现界面缩放突然变小(或变大)的原因

的设计初衷是让 Qt 与系统 DPI 完全一致,以获得最精确的浮点缩放;但在 Windows 下多屏/睡眠唤醒的真实环境中,这常常导致“唤醒后界面突然缩放变化”的问题。如果不希望界面缩放随系统的临时浮动值而变动,可以选择RoundFloorCeil等取整策略(部分保守),或在程序启动前手动设置(相当于“自己做主”告诉 Qt 每个屏幕用什么倍数)。如果你的应用需要在运行时动态跟随系统 DPI(比如拔插显示器后想自动调整),则需要自行监听QScreen的相关信号(如等),然后重新计算并设置新的。

2025-02-07 20:12:56 168

原创 Qt中弹出窗口的实现与鼠标事件处理

为了解决这个问题,我们可以在弹出窗口中安装一个全局事件过滤器,手动检测鼠标点击事件,当点击到窗口外部时,关闭弹出窗口。这样,弹出窗口不会捕获鼠标事件,父窗口的控件可以正常接收鼠标事件,悬停效果也能正常退出。类型的窗口会捕获所有的鼠标事件,导致父窗口中的控件无法正确接收到鼠标事件。的悬停效果无法退出,是因为当弹出窗口显示后,鼠标移动到弹出窗口上,但由于。捕获鼠标事件的问题,又实现了弹出窗口在点击外部时自动关闭的效果。捕获鼠标事件的问题,保证父窗口的控件能够正常接收鼠标事件。

2024-11-06 16:26:22 1214

原创 如何通过事件过滤器为 QToolButton 设置不同状态下的图标

使用事件过滤器来捕捉的鼠标事件,根据不同的事件类型(如鼠标进入、离开、按下、释放)动态更改按钮的图标。事件过滤器允许我们在不修改按钮本身的情况下,拦截和处理特定的事件。通过事件过滤器的方法,可以灵活地为设置不同状态下的图标。这种方法不仅适用于单个按钮,也可以扩展到多个按钮,提升代码的复用性和维护性。关键在于正确捕捉并处理按钮的鼠标事件,根据事件类型动态更改图标,从而实现丰富的用户交互效果。在实际开发中,根据项目的复杂度和需求选择合适的方法。如果只需简单的状态切换,使用样式表可能更为简便;

2024-10-20 14:41:00 433

原创 如何为 QSlider 编写 QSS 样式:详细教程

groove代表滑动条的背景,即用户未滑过的区域,而sub-page代表用户已经滑过的区域。我们可以分别为这两个部分设置样式。/* 滑动条的背景,未划过的区域 */width: 4px;/* 设置滑动条轨道的宽度 *//* 已划过的区域背景 */width: 4px;/* 保持轨道宽度一致 */groove部分设置了未滑过区域的背景颜色为#3EA8FF,这是一种蓝色。sub-page部分表示用户滑过的区域,这里将其设置为浅灰色#EEEEEE,以便区分已经滑过的部分。

2024-10-17 14:37:03 889

原创 使用 QSS 自定义 QComboBox 样式并移除下拉阴影效果

通过 QSS,可以轻松修改QComboBox的背景颜色、边框、箭头图标、以及下拉列表的项目样式。下面是一个示例 QSS,用于自定义QComboBox的样式。/* QComboBox 主体样式 *//* 左侧内边距 *//* 根据需要调整高度,确保箭头和文字垂直居中 *//* 下拉按钮(箭头)的样式 *//* 总宽度 = 箭头宽度 9px + 右边距 8px + 8px 额外空间 *//* 去除默认边框 *//* 下拉箭头的具体样式 *//* 默认箭头图片 */

2024-10-17 12:59:10 856

原创 解决 Qt 中提升控件后样式表无法正确应用的问题

paintEvent。

2024-10-12 21:30:28 956

原创 在 Qt 中实现可拖动的无边框 MainWindow 并设置圆角效果

首先在MainWindow类中添加成员变量,用来记录拖动状态和拖动起始位置:private:// 是否正在拖动// 鼠标按下时的初始位置。

2024-10-11 20:00:58 679

原创 小微企业的税务管理:增值税与企业所得税详解

**一般纳税人**:当企业的年应税销售额超过一定标准时(工业企业500万元,商业企业800万元),企业应被认定为**一般纳税人**,并按照更高的税率(如13%或6%)缴纳增值税。- **小规模纳税人**:小规模纳税人的增值税税率为**3%**,通常按季度进行增值税申报。发票作为企业的**成本和费用**的证明,能够用来计算企业所得税的应纳税所得额,从而降低企业的税负。- **税务合规**:发票是企业税务合规的重要凭证,税务机关会依据发票检查企业的经营支出是否真实合法。

2024-10-09 20:57:29 59

原创 PyCharm 推送到 GitHub 失败:原因、现象和解决方案

在使用 PyCharm 时,如果遇到推送代码到 GitHub 失败的问题,尤其是 HTTPS 连接超时或被重置,可以考虑将远程仓库的 URL 改为 SSH 协议。SSH 协议不仅能够解决网络连接问题,还提供了更安全的身份验证方式,减少了证书验证的麻烦。希望这篇文章能够帮助你解决类似的问题,顺利完成代码的推送。

2024-10-07 21:49:16 3015

原创 深入理解Flask应用中不同模式下的数据库连接池

连接池的重要性:连接池可以提高数据库操作的性能和可靠性。同步模式下的连接池:即使一次只处理一个请求,连接池也可能维护多个连接。Gevent模式下的连接池:需要更大的连接池支持高并发请求。合理配置连接池:根据应用需求和数据库限制,调整连接池大小,优化应用性能。监控和调整:持续监控数据库连接数和应用性能,及时调整配置。

2024-10-06 17:14:39 561

原创 在 Ubuntu ECS 实例上部署高性能安全的 Redis 服务指南

本文将详细介绍如何在 Ubuntu 系统的阿里云 ECS 实例上安装和配置 Redis,分配 2GB 内存,并进行全面的性能优化和安全配置,使其功能接近阿里云的商用 Redis 服务。通过上述步骤,您已成功在 Ubuntu ECS 实例上安装并配置了 Redis,分配了 2GB 内存,并进行了全面的性能和安全优化。虽然无法完全匹配阿里云商用 Redis 的所有高级功能,但通过自主搭建和精细配置,已尽可能接近商用级别的性能和安全性。首先,确保您的系统软件包是最新的,以避免潜在的兼容性问题。

2024-10-05 21:45:13 953

原创 使用 pexports.exe 从 DLL 生成 .lib 文件的详细教程

当我们使用第三方库时,通常需要.lib文件来在编译时链接。如果只有 DLL 而没有.lib文件,可以通过以下方法生成。

2024-10-04 09:59:33 783

原创 HTTP 重定向:301 与 308 的区别

HTTP 重定向是指服务器响应客户端请求时,通过特定的状态码和Location响应头将客户端引导到另一个资源。例如,当用户访问一个过期或被移动的页面时,服务器可以通过重定向将用户自动转移到新的页面,提升用户体验。

2024-09-29 10:53:53 680

原创 Docker 容器日志记录与管理:日志输出、轮转与配置实践

通过合理配置 Docker 容器的日志驱动和轮转策略,可以有效避免日志文件过大、占用过多磁盘空间的问题。无论是通过全局设置,还是为单个容器定制日志配置,Docker 提供了强大的日志管理能力。确保日志的稳定性和及时清理,是容器化环境中运维的关键一环。通过以上实践,你可以确保 Docker 日志在生产环境中更加可控,满足不同应用场景的需求。

2024-09-28 20:31:33 1192

原创 如何通过 GitHub Actions 使用 SSH 自动化部署到阿里云 ECS 实例

通过 GitHub Actions 和 SSH 自动化部署,可以显著提高你的开发效率和部署的可靠性。本文介绍了如何生成 SSH 密钥、将公钥添加到阿里云 ECS 实例、将私钥添加到 GitHub Secrets,以及编写 GitHub Actions 工作流来实现自动化部署。希望这篇文章对你有所帮助!

2024-09-28 17:44:18 1030

原创 解决 Flask 蓝图 (Blueprint) 注册错误:“The setup method ‘route‘ can no longer be called on the blueprint”

确保所有蓝图的设置(如路由、错误处理等)在注册之前完成。蓝图只能注册一次,多次注册会导致不可预期的行为。按照正确的顺序组织代码,避免蓝图注册后再进行任何修改。通过正确的蓝图使用方法,我们可以保持代码模块化、清晰,并且避免遇到上面提到的常见错误。

2024-09-27 22:12:57 488

原创 如何提升网页加载和跳转速度:Flask 模板渲染 vs Nginx 静态资源处理

在现代 Web 应用中,提升页面的加载速度和响应速度至关重要。无论是用户体验,还是后台服务器的负载优化,快速加载和跳转都是衡量应用成功与否的关键因素。对于使用 Flask 和 Nginx 这类技术栈的开发者,如何权衡 Flask 模板渲染与 Nginx 静态资源处理成为了一个重要的话题。

2024-09-26 21:41:55 1275

原创 Flask + Swagger 完整指南:从安装到配置和注释

Swagger 是一种用于生成 API 文档的工具集,通过简单的注释或定义文件,自动生成漂亮的、交互式的 API 文档。结合 Flask 使用时,我们可以通过flasgger库来集成 Swagger。'title': '我的 API 文档',在此配置中,我们自定义了文档标题,并指定了 Swagger UI 的版本为 3。

2024-09-20 22:19:59 1488

原创 在 pika.SelectConnection 和 gevent 中实现高效异步:事件驱动与协程模型的冲突与优化

在异步系统中,和gevent都是强大的工具,但由于它们的事件驱动模型存在不同,混合使用时可能会产生冲突和延迟。使用与gevent协作,避免事件循环冲突。如果使用,需要确保合适的 I/O 调度策略,避免频繁的上下文切换。考虑,将应用迁移到统一的事件驱动模型上。通过合理的优化,可以减少延迟和资源竞争,提高系统的响应速度和并发性能。最终的选择取决于你的应用需求和对异步操作的依赖程度。

2024-09-19 21:03:27 1357

原创 深入解析 Gunicorn 的两种工作模式:Sync 与 Gevent 模式

Gunicorn 是一个 Python WSGI HTTP 服务器,它能够将应用程序部署在生产环境中。Gunicorn 支持多种并发工作模式,比如sync(同步)模式和gevent(异步协程)模式,以提高 Flask、Django 等应用的处理能力。Gevent 是 Python 中一个轻量级的协程库,它基于 Greenlet 实现,Greenlet 是一种比线程更轻量的微线程。Gevent 通过事件驱动和协程的方式,实现了 I/O 操作的并发处理。

2024-09-19 12:18:13 1771

原创 深入探讨 Flask、Gunicorn、Gevent 与 RecursionError:事件循环与 Monkey Patching 的正确使用

在使用 Gevent 和 Gunicorn 构建异步 Flask 应用时,递归错误通常是由于。

2024-09-19 11:16:18 1109

原创 使用 Flask-Limiter 和 Nginx 实现接口访问次数限制

通过 Nginx 的反向代理配置,我们可以将客户端的真实 IP 传递给 Flask 应用。结合,可以基于客户端的真实 IP 地址,实现针对敏感接口的访问频率限制。这样不仅可以提升 Web 应用的安全性,还能有效防止滥用行为。Nginx 配置: 使用和X-Real-IP头部传递客户端 IP,避免使用172.17.0.1等内网 IP。: 结合 Redis 实现基于 IP 地址的访问次数限制。客户端真实 IP 获取: 通过函数确保 Flask 获取到真实的客户端 IP。

2024-09-18 20:33:47 1146

pexports.exe

pexports.exe

2024-10-04

Detours x86 与 x64 位编译好的静态库

Detours x86 与 x64 位编译好的静态库

2023-08-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除