<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[luansxx的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/luansxx</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; luansxx]]></copyright><item><title><![CDATA[一个 Qml MenuBar 的问题]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/128547762</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/128547762</guid><author>luansxx</author><pubDate>Thu, 05 Jan 2023 10:41:35 +0800</pubDate><description><![CDATA[使用 QQuick.Control 中的 MenuBar 实现主菜单栏。菜单栏包括 File、Edit、View、Help 菜单项。点击菜单项，会弹出对应的菜单。流程1：点击菜单栏上的菜单项，该菜单项被激活（弹出），再次点击该菜单项，菜单项退出激活状态。流程2：如果在激活状态，移动鼠标到另一个菜单项，自动激活（不需要点击）另一个菜单项，当前激活的菜单项退出激活状态。以上都符合预期，但是问题来了。]]></description><category></category></item><item><title><![CDATA[排查 Edge WebView2 在某个设备上不出图像的问题]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/128330604</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/128330604</guid><author>luansxx</author><pubDate>Thu, 15 Dec 2022 16:22:19 +0800</pubDate><description><![CDATA[我们在 Windows 应用内嵌入 Edge WebView2，来展示部分用网页实现的界面。但是最近在某个用户那边出现了问题，整个界面都是空白的，没有内容，导致应用无法使用了。下面整理了一下问题排查的步骤及思路。]]></description><category></category></item><item><title><![CDATA[通过 ffmpeg 串流对接 OBS 等直播软件]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/127330990</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/127330990</guid><author>luansxx</author><pubDate>Thu, 15 Dec 2022 15:14:19 +0800</pubDate><description><![CDATA[我们要将设备通过私有通道输出到 H264 流，传给 OBS 等直播软件使用。为此，设计了上图所示的串流工具。]]></description><category></category></item><item><title><![CDATA[通过一个实例方法了解 C++ 的可变模版参数]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/127457588</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/127457588</guid><author>luansxx</author><pubDate>Sat, 22 Oct 2022 10:30:05 +0800</pubDate><description><![CDATA[对于实现基础框架的人来说，C++ 的可变模版参数真是太有用了，能够瞬间解决很多棘手的问题。下面这个例子就能够充分说明其各种强大的使用方式。]]></description><category></category></item><item><title><![CDATA[Windows 实现以管理员权限运行的代码]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/127269437</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/127269437</guid><author>luansxx</author><pubDate>Tue, 11 Oct 2022 19:16:26 +0800</pubDate><description><![CDATA[有时候我们需要临时用管理员权限做一些事情，在 Windows 上，可以提升权限启动进程。比如通过右键菜单。那么在代码中如何实现这样的功能呢？]]></description><category></category></item><item><title><![CDATA[Windows 控制台程序的 binary pipe 输出输入]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/126850886</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/126850886</guid><author>luansxx</author><pubDate>Wed, 14 Sep 2022 13:53:04 +0800</pubDate><description><![CDATA[用 Visual C++ 实现了一个 Windows 控制台程序，要通过标准输出 stdout 输出二进制 binary 数据，通过管道传给另一个程序（比如视频数据给 ffmpeg）。
然而实际运行时，输出的数据不正确，ffmpeg 不能解析视频数据。]]></description><category></category></item><item><title><![CDATA[实现 DirectShow 虚拟 Camera 驱动]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/126795567</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/126795567</guid><author>luansxx</author><pubDate>Tue, 13 Sep 2022 19:47:21 +0800</pubDate><description><![CDATA[今天我们要实现一个虚拟 Camera 驱动。有这个驱动，在 播放软件（如 VLC）、视频会议软件、主播视频制作软件（如 OBS）中，就可以播放、加入我们的各种特制内容了。]]></description><category></category></item><item><title><![CDATA[实现 QQuickImageProvider 的若干问题的思路]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/126649642</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/126649642</guid><author>luansxx</author><pubDate>Thu, 01 Sep 2022 19:18:05 +0800</pubDate><description><![CDATA[使用 image:// 开头的 url，实际上调用了自定义的 ImageProvider。]]></description><category></category></item><item><title><![CDATA[在 Qt 中实现变色的图标（tintColor）]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/126630025</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/126630025</guid><author>luansxx</author><pubDate>Wed, 31 Aug 2022 19:16:11 +0800</pubDate><description><![CDATA[很多时候，设计要求当按钮的状态变化时（比如 hover、按下，禁用），按钮的背景、文字、图标能够改变颜色，以反馈按钮的当前状态。如下图：改变文字、背景的颜色很容易，但是改变图标颜色就比较麻烦了。早期的方案，是提供一整套不同颜色图片，分别设置给不同的状态。所有一旦要新加或者改变一个图标，都要设计提供一组图片文件，开发一个个的加到代码项目中，再添加一组设置图片的代码，是特别的麻烦。后来，一些平台提供了相关的解决方案，就是 tintColor。............]]></description><category></category></item><item><title><![CDATA[Qt 中大尺寸图片的处理]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/126566337</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/126566337</guid><author>luansxx</author><pubDate>Sun, 28 Aug 2022 10:27:30 +0800</pubDate><description><![CDATA[我们的程序（用 Qt 实现），因为一个用户图标，在发到用户的产品中崩溃了。起因是这样的，我们允许用户注册上传自己的头像。然后中售卖的设备屏幕界面上，也会展示用户自己的头像。有一个用户上传了一个超大的头像图片，6144 x 6144 像素，jpg 的图片有 1.8M。然后他的设备的UI界面就经常卡死、崩溃。计算一下，假如图片每个像素 rgb 3 字节，那么 6144 * 6144 * 3 为 108M，对于 1个嵌入式平台，108 M已经很大了，申请这么大的内存很容易失败，那么程序崩溃就不足为奇了。.....]]></description><category></category></item><item><title><![CDATA[实现支持 MJPEG 的播放器]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/126439279</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/126439279</guid><author>luansxx</author><pubDate>Thu, 25 Aug 2022 18:46:14 +0800</pubDate><description><![CDATA[（或:MJPG）是一种影像压缩格式，其中每一都分别使用编码。M-JPEG常用在和之类的图像采集设备上，系统也常用这种格式。播放器和包括，，在内许多原生支持M-JPEG。——对于网络摄像头时，使用 MJPEG 是一个比较低成本的方案，并且非常时候局域网配置。因为不需要很高的压缩效率，替换 H264、H265 会省下专利费和芯片成本。MJPEG 流没有统一的规范，微软使用很老的 AVI 格式封装，Mac 平台则用 Mp4 封装。对于流式传输，则是各个摄像头厂商自己定义协议了，所以需要实自己现播放。......]]></description><category></category></item><item><title><![CDATA[一个 DirectShow 播放问题的排查记录]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/125946335</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/125946335</guid><author>luansxx</author><pubDate>Sun, 24 Jul 2022 13:55:11 +0800</pubDate><description><![CDATA[在Windows平台，基于ActiveMovie播放。ActiveMovie是WindowsMediaPlayer的一个组件，底层使用了DirectShow框架。]]></description><category></category></item><item><title><![CDATA[运行时加载 Objective-C]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/125690055</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/125690055</guid><author>luansxx</author><pubDate>Sat, 09 Jul 2022 10:48:33 +0800</pubDate><description><![CDATA[当程序只是弱依赖某一个功能时，可以使用动态库组织被依赖的功能，并在主程序中使用代码加载动态库及其中的功能模块，这种方式被称为运行时加载。


在类 unix 平台：


当功能函数比较多的时候，一般需要用 C++ 类封装， 使用纯虚接口类可以方便运行时加载。只要导出一个创建对象的函数就可以了。


当我们在 MacOSX 平台，使用 Objective-C 实现功能时，我们可以更加方便的实现运行时加载。不需要刻意引入一个纯虚...]]></description><category></category></item><item><title><![CDATA[Qt/Qml 中对象生命期的陷阱]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/124946562</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/124946562</guid><author>luansxx</author><pubDate>Tue, 24 May 2022 16:56:24 +0800</pubDate><description><![CDATA[在 Qml 中访问 Qt 的对象（包括属性、方法、信号）非常的方便，但是即使是经验老道的 Qt 程序员，也容易被这其中的机制坑到。然后 Qml 程序就像一个定时炸弹一样，不知道怎么就冒出一个 Crash，而且 crash 栈还在 libQml 库中，无法定位问题。

先看几个例子吧。。。

例1：用 slot 返回 QObject


class MyItemModel : public QObject
{
    Q_OBJECT
public slots:
    QVariant itemAt(int]]></description><category></category></item><item><title><![CDATA[Qt/Qml 实现字符串动态计算]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/124899709</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/124899709</guid><author>luansxx</author><pubDate>Sat, 21 May 2022 17:32:20 +0800</pubDate><description><![CDATA[当我们要显示包含变量的文字时，在 Qml 里面怎么实现？下面我们就提供一种方法。

功能需求

比如我们要将下面的字符串显示在界面上，


QString text = "Moving ${object} from ${start.x}-${start.yx} to ${end.x}-${end.yx}"


...]]></description><category></category></item><item><title><![CDATA[Qt Json 库的效率优化]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/124772086</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/124772086</guid><author>luansxx</author><pubDate>Sat, 14 May 2022 21:46:43 +0800</pubDate><description><![CDATA[使用 Qt Json 库，可以比较方便的实现基于 json 格式的接口通信。然而在通信消息比较频繁的情况下，容易成为效率瓶颈。本文就如何更有效率的使用 Qt Json 库，以及背后的一些相关实现细节做一些讨论。

使用 QtJson 一个例子


QByteArray data;
QJsonDocument doc = QJsonDocument::fromJson(data);
auto json = doc.object();
for (auto elem : json["items"].toArray]]></description><category></category></item><item><title><![CDATA[Windows 应用偶现界面卡死问题的分析]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/123756865</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/123756865</guid><author>luansxx</author><pubDate>Sat, 26 Mar 2022 21:40:51 +0800</pubDate><description><![CDATA[我们开发的应用，在 Windows 平台上偶尔会卡死，不再响应任何鼠标事件。这样的现象不太容易出现，操作一天可能会出现一次。

在经过无数次重启应用，复现问题，断点调试，终于发现了一点端倪，并在各种排除法隔离一部分功能试验后，终于找到了罪魁祸首——一个几乎可以忽略的不合理参数。

特地在此记录一下，希望能够在某个时候帮助到某个同路人。

问题背景

首先，说明一下相关的软件背景。

我们使用的是一个第三方封装的 GUI 库，封装了 Windows 的窗口、窗口消息、GDI 等功能。这个库不是 Qt，而是一个]]></description><category></category></item><item><title><![CDATA[动态生成 3D 可打印的收款码]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/123434707</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/123434707</guid><author>luansxx</author><pubDate>Fri, 11 Mar 2022 22:01:10 +0800</pubDate><description><![CDATA[本文介绍了一种制作 3D 收款码的方法。通过本文介绍的 C++ 程序，可以将收款码（本质上是一串二进制数据）转换为 3D 模型（STL 文件），然后就可以用 3D 打印机打印出来了。

当然，要真正拿到属于你的 3D 收款码的实物，你首先需要一台 3D 打印机，不过本文重点是其中的几何算法、程序设计思路。

我已经把这个C++ 程序开源，有兴趣的可以试试使用这个工具。Github 地址

1、3D 模型概述



2、STL 格式介绍



3、3D 收款码设计



4、关键代码分析



4.1、制作.]]></description><category></category></item><item><title><![CDATA[通过多线程压缩提高生成 Zip 文件的效率]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/122902319</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/122902319</guid><author>luansxx</author><pubDate>Fri, 18 Feb 2022 19:14:16 +0800</pubDate><description><![CDATA[在很多情况下，需要用 Zip 格式保存数据文档。当数据量较大时（超过100M），就会明显感觉到保存文件耗时很长（超过10秒），这样的用户体验难以接受，想要优化。

现有开源方案



多线程多文件方案



方案实现


...]]></description><category></category></item><item><title><![CDATA[Qt/QML 实现图片圆角剪切效果]]></title><link>https://blog.youkuaiyun.com/luansxx/article/details/122790581</link><guid>https://blog.youkuaiyun.com/luansxx/article/details/122790581</guid><author>luansxx</author><pubDate>Sat, 05 Feb 2022 15:34:45 +0800</pubDate><description><![CDATA[在很多 UI 设计中，需要将图片按照一定的形式整理。比如下面的 VIP 图片就是用一个圆形剪切原始图片，形成的效果。



其实它的原始图片是这样的：



要在 QML 中实现这样的效果，可以使用 OpacityMask（QtGraphicalEffects 1.0）。但是我们知道 QtGraphicalEffects 依赖硬件支持，在某些（比如嵌入式）平台，并没有实现，也就是说，这样的方案存在兼容性问题。

    下面我们就
.........]]></description><category></category></item></channel></rss>