- 博客(344)
- 资源 (3)
- 收藏
- 关注
原创 一个 Qml MenuBar 的问题
使用 QQuick.Control 中的 MenuBar 实现主菜单栏。菜单栏包括 File、Edit、View、Help 菜单项。点击菜单项,会弹出对应的菜单。流程1:点击菜单栏上的菜单项,该菜单项被激活(弹出),再次点击该菜单项,菜单项退出激活状态。流程2:如果在激活状态,移动鼠标到另一个菜单项,自动激活(不需要点击)另一个菜单项,当前激活的菜单项退出激活状态。以上都符合预期,但是问题来了。
2023-01-05 10:41:35 826 2
原创 排查 Edge WebView2 在某个设备上不出图像的问题
我们在 Windows 应用内嵌入 Edge WebView2,来展示部分用网页实现的界面。但是最近在某个用户那边出现了问题,整个界面都是空白的,没有内容,导致应用无法使用了。下面整理了一下问题排查的步骤及思路。
2022-12-15 16:22:19 4448 1
原创 通过 ffmpeg 串流对接 OBS 等直播软件
我们要将设备通过私有通道输出到 H264 流,传给 OBS 等直播软件使用。为此,设计了上图所示的串流工具。
2022-12-15 15:14:19 2376
原创 通过一个实例方法了解 C++ 的可变模版参数
对于实现基础框架的人来说,C++ 的可变模版参数真是太有用了,能够瞬间解决很多棘手的问题。下面这个例子就能够充分说明其各种强大的使用方式。
2022-10-22 10:30:05 476
原创 Windows 实现以管理员权限运行的代码
有时候我们需要临时用管理员权限做一些事情,在 Windows 上,可以提升权限启动进程。比如通过右键菜单。那么在代码中如何实现这样的功能呢?
2022-10-11 19:16:26 2717
原创 Windows 控制台程序的 binary pipe 输出输入
用 Visual C++ 实现了一个 Windows 控制台程序,要通过标准输出 stdout 输出二进制 binary 数据,通过管道传给另一个程序(比如视频数据给 ffmpeg)。然而实际运行时,输出的数据不正确,ffmpeg 不能解析视频数据。
2022-09-14 13:53:04 479
原创 实现 DirectShow 虚拟 Camera 驱动
今天我们要实现一个虚拟 Camera 驱动。有这个驱动,在 播放软件(如 VLC)、视频会议软件、主播视频制作软件(如 OBS)中,就可以播放、加入我们的各种特制内容了。
2022-09-13 19:47:21 4186 8
原创 实现 QQuickImageProvider 的若干问题的思路
使用 image:// 开头的 url,实际上调用了自定义的 ImageProvider。
2022-09-01 19:18:05 587
原创 在 Qt 中实现变色的图标(tintColor)
很多时候,设计要求当按钮的状态变化时(比如 hover、按下,禁用),按钮的背景、文字、图标能够改变颜色,以反馈按钮的当前状态。如下图:改变文字、背景的颜色很容易,但是改变图标颜色就比较麻烦了。早期的方案,是提供一整套不同颜色图片,分别设置给不同的状态。所有一旦要新加或者改变一个图标,都要设计提供一组图片文件,开发一个个的加到代码项目中,再添加一组设置图片的代码,是特别的麻烦。后来,一些平台提供了相关的解决方案,就是 tintColor。............
2022-08-31 19:16:11 2470
原创 Qt 中大尺寸图片的处理
我们的程序(用 Qt 实现),因为一个用户图标,在发到用户的产品中崩溃了。起因是这样的,我们允许用户注册上传自己的头像。然后中售卖的设备屏幕界面上,也会展示用户自己的头像。有一个用户上传了一个超大的头像图片,6144 x 6144 像素,jpg 的图片有 1.8M。然后他的设备的UI界面就经常卡死、崩溃。计算一下,假如图片每个像素 rgb 3 字节,那么 6144 * 6144 * 3 为 108M,对于 1个嵌入式平台,108 M已经很大了,申请这么大的内存很容易失败,那么程序崩溃就不足为奇了。.....
2022-08-28 10:27:30 4056 1
原创 实现支持 MJPEG 的播放器
(或:MJPG)是一种影像压缩格式,其中每一都分别使用编码。M-JPEG常用在和之类的图像采集设备上,系统也常用这种格式。播放器和包括,,在内许多原生支持M-JPEG。——对于网络摄像头时,使用 MJPEG 是一个比较低成本的方案,并且非常时候局域网配置。因为不需要很高的压缩效率,替换 H264、H265 会省下专利费和芯片成本。MJPEG 流没有统一的规范,微软使用很老的 AVI 格式封装,Mac 平台则用 Mp4 封装。对于流式传输,则是各个摄像头厂商自己定义协议了,所以需要实自己现播放。......
2022-08-25 18:46:14 2110
原创 一个 DirectShow 播放问题的排查记录
在Windows平台,基于ActiveMovie播放。ActiveMovie是WindowsMediaPlayer的一个组件,底层使用了DirectShow框架。
2022-07-24 13:55:11 781 2
原创 运行时加载 Objective-C
当程序只是弱依赖某一个功能时,可以使用动态库组织被依赖的功能,并在主程序中使用代码加载动态库及其中的功能模块,这种方式被称为运行时加载。在类 unix 平台:当功能函数比较多的时候,一般需要用 C++ 类封装, 使用纯虚接口类可以方便运行时加载。只要导出一个创建对象的函数就可以了。当我们在 MacOSX 平台,使用 Objective-C 实现功能时,我们可以更加方便的实现运行时加载。不需要刻意引入一个纯虚...
2022-07-09 10:48:33 270
原创 Qt/Qml 中对象生命期的陷阱
在 Qml 中访问 Qt 的对象(包括属性、方法、信号)非常的方便,但是即使是经验老道的 Qt 程序员,也容易被这其中的机制坑到。然后 Qml 程序就像一个定时炸弹一样,不知道怎么就冒出一个 Crash,而且 crash 栈还在 libQml 库中,无法定位问题。先看几个例子吧。。。例1:用 slot 返回 QObjectclass MyItemModel : public QObject{ Q_OBJECTpublic slots: QVariant itemAt(int
2022-05-24 16:56:24 789 1
原创 Qt/Qml 实现字符串动态计算
当我们要显示包含变量的文字时,在 Qml 里面怎么实现?下面我们就提供一种方法。功能需求比如我们要将下面的字符串显示在界面上,QString text = "Moving ${object} from ${start.x}-${start.yx} to ${end.x}-${end.yx}"...
2022-05-21 17:32:20 895
原创 Qt Json 库的效率优化
使用 Qt Json 库,可以比较方便的实现基于 json 格式的接口通信。然而在通信消息比较频繁的情况下,容易成为效率瓶颈。本文就如何更有效率的使用 Qt Json 库,以及背后的一些相关实现细节做一些讨论。使用 QtJson 一个例子QByteArray data;QJsonDocument doc = QJsonDocument::fromJson(data);auto json = doc.object();for (auto elem : json["items"].toArray
2022-05-14 21:46:43 1282
原创 Windows 应用偶现界面卡死问题的分析
我们开发的应用,在 Windows 平台上偶尔会卡死,不再响应任何鼠标事件。这样的现象不太容易出现,操作一天可能会出现一次。在经过无数次重启应用,复现问题,断点调试,终于发现了一点端倪,并在各种排除法隔离一部分功能试验后,终于找到了罪魁祸首——一个几乎可以忽略的不合理参数。特地在此记录一下,希望能够在某个时候帮助到某个同路人。问题背景首先,说明一下相关的软件背景。我们使用的是一个第三方封装的 GUI 库,封装了 Windows 的窗口、窗口消息、GDI 等功能。这个库不是 Qt,而是一个
2022-03-26 21:40:51 1912 1
原创 动态生成 3D 可打印的收款码
本文介绍了一种制作 3D 收款码的方法。通过本文介绍的 C++ 程序,可以将收款码(本质上是一串二进制数据)转换为 3D 模型(STL 文件),然后就可以用 3D 打印机打印出来了。当然,要真正拿到属于你的 3D 收款码的实物,你首先需要一台 3D 打印机,不过本文重点是其中的几何算法、程序设计思路。我已经把这个C++ 程序开源,有兴趣的可以试试使用这个工具。Github 地址1、3D 模型概述2、STL 格式介绍3、3D 收款码设计4、关键代码分析4.1、制作.
2022-03-11 22:01:10 1678
原创 通过多线程压缩提高生成 Zip 文件的效率
在很多情况下,需要用 Zip 格式保存数据文档。当数据量较大时(超过100M),就会明显感觉到保存文件耗时很长(超过10秒),这样的用户体验难以接受,想要优化。现有开源方案多线程多文件方案方案实现...
2022-02-18 19:14:16 3037 2
原创 Qt/QML 实现图片圆角剪切效果
在很多 UI 设计中,需要将图片按照一定的形式整理。比如下面的 VIP 图片就是用一个圆形剪切原始图片,形成的效果。其实它的原始图片是这样的:要在 QML 中实现这样的效果,可以使用 OpacityMask(QtGraphicalEffects 1.0)。但是我们知道 QtGraphicalEffects 依赖硬件支持,在某些(比如嵌入式)平台,并没有实现,也就是说,这样的方案存在兼容性问题。 下面我们就.........
2022-02-05 15:34:45 2575 1
原创 三维几何图形创作方法(Geometry3D)之二
多面体 在开始实际的例子之前,先看一下三维图形有哪些共性。怎么处理这些共性。这其中有一类三维图形,完全由顶点、棱、面组成,称为多面体。他很像二维图形中的多边形。 长方体、棱台都是多面体。 在多面体作图中,顶点、棱是比较关键的元素,具体哪些顶点之间有棱连接,是由具体的图形决定的。当给定了一组顶点,一个基础的问题是,这些顶点在二维平面映射后的点集的包围多边形是怎样的。包围多边形一般用于确定图形的可点击范围,在接下来的...
2021-12-12 17:08:45 1311
原创 在 Mac 平台播放 H264 直播流
虽然做过音视频多年了,但是一直没有了解 Mac(以及 iOS)平台的音视频框架。最近要做一个 H264 纯视频流的播放,有机会研究了一下。方案调研 在 Mac 上播放视频,有好几个方案:方案一:使用AVPlayerAVPlayer 支持.mp4、.mov、.m4v、.3gp、.avi 这些文件格式,但是不支持raw h264,所以我们需要将raw h264 封装为上面的一种格式。然而,上面任意一种都是点播格式,没有一个能够描述持续不断的直播...
2021-12-12 09:41:09 3066
原创 基于 DirectShow 实现 SourceFilter 常见问题分析
很多年前记录了一篇实现 DirectShow SourceFilter 的文章(见 播放器插件实现系列 —— DirectShow 之 SourceFilter),那次只是简单实现验证了一下,并没有大规模上线使用。没想到多年之后,还有机会重拾之前的代码。这次功能开发上线还是遇到了一些问题,在这里记录一下。问题一:Windows SDK 不再包含 DirectShow 辅助库之前在 MFC 时代,微软提供了DirectShow sdk,可以方便我...
2021-12-11 15:04:47 775
原创 简单对象访问通道
对象通道,用于实现跨语言、跨平台的对象间的相互调用。不同于 JNI、FFI 等技术,对象通道是基于协议的相互操作。因此,它不是语言之间两两相互调用的解决方案,也不需要某个基础开发语言作为中介,而是一个统一的跨语言、跨平台解决方案,当然,它也可以实现对远程对象的访问。
2021-12-04 18:52:42 394
原创 大前端几种开发语言对比
项目 概述 语言 特性 备注 基本类型 Basic Operators 整数、浮点数 C++ 整数类型宽度不固定,如 int,自动数值类型转换 Java 没有无符号整数,存在装箱Box类型 C# Swift ...
2021-12-03 22:31:48 2453
原创 嵌入式 Qt/Qml 屏幕旋转(横屏,竖屏)问题的解决
嵌入式 Linux 的一个小屏幕,正常是竖屏模式,可是我们产品中需要横着使用。 Qml 代码已经写好了,在 PC 正常工作。然后移植到嵌入式 Linux,问题来了,屏幕方向不对,显示不正常。 那就去网上找方法吧。不可行方案方案一:export QT_QPA_EGLFS_ROTATION=90没有任何效果。方案二:export QT_QPA_ROTATION=linuxfb:rotation=90...
2021-11-25 20:36:32 6362 10
原创 二维几何图形创作方法(Geometry2D)
这里我们介绍一下在场景中构建二维几何图形,计算图形的顶点、边的方法。创作几何图形主要依靠鼠标(或者触摸屏、手写笔之类的点输入设备),输入几个点,快速画出几何图形。大部分图形之要有两个点就能创作出来。...
2021-11-07 08:43:04 1041
原创 C++ Markdown 开源现状调研
对 Markdown 的处理一般有三个阶段:解析,编译,渲染。 解析主要是针对 Markdown 内容,分析其内容结构,输出一系列内容单元。 编译是指从 Markdown 语法结构转换为另一种文档格式。 渲染是针对编译后的文档格式进行的,一般是各个平台、框架自己的工作了。项目 功能 优势 劣势 依赖 描述 mity/md4c 解析 解析快速 集成简单 Qt 官方使用 ...
2021-11-05 14:12:06 727
原创 扫描仪功能开发(TWAIN)
TWAIN依靠三个组件协同完成与图像设备的通讯和数据传输工作,这三个组件就是Application、SourceManager和Source。 组件 说明 Application 就是你要编写的应用程序。 Source Manager 是由TWAIN提供的一个Source的管理器,它不仅可以收集本地系统已经安装了的图像设备,还可以根据需要去加载设备。同时,它最重要的功能是担任A...
2021-10-31 09:05:34 2833
原创 Android 框架实现分析 - 升级
recoveryRecovery的源代码在bootable/recovery/目录。Recovery在init进程中被启动,启动过程定义在/etc/init.rc中:在bootable/recovery/etc/init.rc中有下面的服务定义: service recovery /sbin/recovery seclabel u:r:recovery:s0 升级流程升级...
2021-10-30 08:35:35 1304
原创 Android 框架实现分析 - 构建 - releasetools
build_image.py build/tools/releasetools/build_image.py: ------------------------------------------------------------------------- in_dir = argv[0] glob_dict_file = argv[1] out_file = argv[2] mkuserimg.sh [-s] in_dir...
2021-10-30 08:29:26 355
原创 Android 框架实现分析 - 构建 - tools
acp源代码位于:build/tools/acp。fs_config源代码位于:build/tools/fs_config。fs_config从stdin读入目录、文件列表(每行一项,目录必须以“/”结尾),查找权限数据库,向stdout输出每一项名称、uid、gid和mode,以及selabel。输出内容: system 0 0 755 system/fonts 0 0 755 syste...
2021-10-30 08:16:48 425
原创 Android 框架实现分析 - 构建 - 文件结构
属性文件 镜像文件 包含内容 生成工具 说明 default.prop root/* post_process_props.py system/build.prop $(TARGET_DEVICE_DIR)/system.prop $(ADDITIONAL_BUILD_PROPERTIES)
2021-10-30 08:12:29 206
原创 Android 框架实现分析 - 构建 - Make体系
目录定义 路径 变量 out OUT_DIR + host HOST_OUT_ROOT | + common HOST_COMMON_OUT_ROOT | + <os>-<arch> HOST_OUT BUILD_OUT | | + bin ...
2021-10-30 08:09:27 889
原创 Android 框架实现分析 - 工具 - Base工具
frameworks/base/cmds下的工具都是用java开发,基于api接口。有am、backup、bmgr、bu、content、ime、input、media、pm、requestsync、screencap、settings、svc、wm。BaseCommand类用来辅助处理命令行参数和其他公共行为,其源代码位于:frameworks/base/core/java/com/android/internal/osBaseCommand.jav...
2021-10-30 08:06:27 353
WinRT 环境下缺失 Windows API 模拟实现
2013-09-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人