自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

liulun的博客

风雪夜归人

  • 博客(147)
  • 资源 (2)
  • 收藏
  • 关注

原创 Skia 的核心类---深入画布SkCanvas

SkCanvas 是 Skia 的核心类之一,我们可以把它看作画布,它提供了用于绘制图形的接口。

2025-07-18 16:18:03 596

原创 如何解决 Windows 11首次启动 exe 慢的问题

我遇到的问题是:生成 exe 文件很快,但启动这个 exe 却很慢(大概要等半分钟)。如果我不改代码,直接启动这个 exe 又很快。也就是说,只有首次启动启动 exe 慢。每次调试程序的时候 Visual Studio 都会帮我重新生成 exe 文件。这个问题只出现在 Windows 11 上,Windows 10 没这个问题。日常工作就是用 Visual Studio 开发桌面应用。改完之后,再次调试程序,一切都变得飞快了。我是一个桌面端开发工程师。

2025-07-17 11:54:45 83

原创 Skia---渐变色着色器

今天介绍的是实际工作中最常用到的着色器:渐变色着色器。渐变色着色器是一个从一种颜色平滑的过渡到另一种颜色的效果,渐变色着色器的作用主要是增强图形的视觉吸引力。

2025-07-11 12:06:17 557

原创 在浏览器中使用SQLite(官方sqlite3.wasm)

摘要:本文建议避免使用sqlite-wasm工具,推荐直接使用官方SQLite WebAssembly版本。通过下载jswasm目录文件并引入sqlite3-worker1-promiser.js脚本,封装了一个TypeScript类Db来操作SQLite数据库。重点介绍了如何利用OPFS文件系统(浏览器私有高性能存储)创建和管理数据库,包括建表检查和数据查询方法。文章还说明了SQL指令执行的回调机制,以及如何删除数据库文件。该方法提供了浏览器端持久化存储的解决方案。

2025-07-04 10:37:54 745

原创 使用 UI 合成器(UI::Composition)集成 WebView2

本文介绍了两种集成WebView2的方法:传统子窗口方式和UI合成器方式。传统方法存在窗口层级管理和鼠标事件处理的局限性,而UI合成器方案则能更好地控制WebView2渲染内容,支持旋转、缩放等效果。文章详细说明了如何使用UI合成器创建WebView2控件,包括Compositor初始化、控件创建、内容合成以及鼠标事件转发等关键步骤。通过该方案,WebView2内容可无缝融入窗口界面,但需要开发者手动处理鼠标事件转发和光标变化。作者提供了简化代码示例,并推荐参考其开源项目HorseJs获取完整实现。

2025-07-01 11:38:35 606

原创 Qt6 如何在一个视频上放置一个按钮

摘要:在Qt6中使用QVideoWidget创建视频播放器时,由于硬件加速导致无法直接在视频上叠加按钮控件。解决方案是改用QGraphicsVideoItem结合QGraphicsView和QGraphicsScene系统。通过创建QGraphicsView场景,将视频作为QGraphicsVideoItem添加,同时可以自由添加按钮等控件到同一场景中。这种方法解决了硬件加速渲染带来的控件叠加问题,实现视频和按钮的完美分层显示。代码示例展示了如何构建视频播放器并添加圆形透明按钮控件。

2025-06-26 15:00:06 251

原创 为 Visual Studio 工程设置预编译头

摘要:预编译头(PCH)是优化C/C++项目编译速度的技术,通过预先编译常用且不常修改的头文件。在VisualStudio中设置PCH需:1)配置工程属性;2)创建pch.h(包含常用头文件)和pch.cpp(仅包含pch.h);3)为每个cpp文件首行添加#include"pch.h"。该方法能避免重复解析头文件,显著提升编译速度,减少手动错误。现代VS工程推荐使用pch.h命名而非传统的stdafx.h。

2025-06-23 10:13:49 194

原创 如何静态链接 WebView2 的 WebView2Loader 库

摘要:通过修改WebView2组件安装目录下的Common.targets文件(约103行),将WebView2LoaderPreference参数从"Dynamic"改为"Static",可实现应用程序对WebView2Loader.dll的静态链接,消除运行时依赖。此设置在WebView2版本升级后需重新配置。操作路径为:packages\Microsoft.Web.WebView2.{版本号}\build\Common.targets。(149字)

2025-06-19 12:28:42 173

原创 SQLite官方数据库加密方案

由于要查询历史消息,所以聊天数据都得落地(从服务器访问慢,且服务器压力大)。它只对数据库文件加密。也就是说,如果客户端内存暴露了,那数据还是不安全的,但这已经足够了。(如果你的客户端有两个数据库,一个加密,一个未加密,你不用集成两套。不过在打开数据库之后,你应该马上传入密钥,才能访问加密的数据库。但谁也不知道历史消息里哪句话是敏感的,哪句话是不敏感的。值得一提的是,你可以使用编译的程序,访问未加密的数据库。假设你交了钱之后,拿到了代码,编译成了动态链接库,中读取加密的内容(读到内存中的是明文),

2025-06-16 13:47:25 583

原创 单 exe 截图软件:ScreenCapture 2.3.1 发布

218626.018.0Enter200006.9.1ScreenCapture 截图工具 体积小(8M 左右)、仅一个可执行文件,无需安装,不依赖任何动态链接库。运行速度快、内存占用低、CPU 使用率低。

2025-06-13 13:54:21 708

原创 Skia---无所不能的路径

Skia 里的路径(SkPath)通常是由一系列点连接而成,可以是闭合的面,也可以不是,点和点之间的连线可以是直线也可以是曲线(圆弧或者贝塞尔曲线等),甚至一个路径里可以拥有多个闭合的面。可以说。

2025-06-11 13:06:22 577

原创 玩转 Skia 的颜色

skia

2025-06-09 13:17:06 1150

原创 Skia如何绘制几何图形

应用程序(网页、桌面应用或移动应用)大多数都是由基本的几何图形构成的。那我们该如何使用 Skia 绘制基本的几何图形。drawRect 方法负责在窗口中绘制矩形。窗口重绘时执行 paint 方法,在此方法中,把画布指针传递给 drawRect 方法,让 drawRect方法在窗口中绘制矩形。非填充绘图对象。默认情况下绘图对象 SkPaint 为填充状态,当执行 paint.setStroke(true) 代码后,绘图对象就变成了非填充状态。绘图对象的 setStrokeWidth 方法,用于设置边框粗细。

2025-06-06 14:50:17 1059

原创 开源推荐:从源代码构建Qt的二进制版本

开源项目 buildQt 提供了预编译的Qt5/Qt6二进制文件,支持MSVC、MinGW64和LLVM-MinGW三大编译器,包含静态和动态链接库,适用于Windows64位平台。该项目提供精简版和完整版两种选项,使用GitHub Action自动构建,帮助开发者节省大量编译时间。注意使用时需确保Visual Studio版本不低于作者标注的版本。作者yuanpeirong的无私贡献极大便利了Qt开发者使用体验。

2025-06-03 14:41:21 146

原创 不用模板,让C++方法接收可变数量的参数

文章摘要:本文介绍了C++中可变参数函数的实现方法。通过#include<cstdarg>头文件,使用va_list、va_start、va_arg和va_end宏处理可变参数。示例展示了两种实现方式:直接获取参数和参数列表转发。关键点包括:必须用va_end清理、参数数量由count指定、类型安全需自行保证。典型应用如处理窗口事件时传递x,y,w,h坐标参数,其中4表示参数个数。这种方法为处理不定数量参数提供了灵活方案,但需注意正确使用宏确保资源释放。

2025-05-30 14:28:32 211

原创 让Qt窗口覆盖整个桌面区域(支持多屏幕桌面)

第一:窗口必须是自定义 QMainWindow ,不能是 QWidget,用QWidget是有问题的。第二:方法中最后五行代码必须按顺序执行,不按这个顺序会有问题。

2025-05-28 12:29:55 290

原创 获取鼠标所在位置的窗口,再根据窗口句柄获取应用程序路径

该代码片段用于获取当前鼠标光标所在窗口的进程名称。首先,通过GetCursorPos获取鼠标位置,然后使用WindowFromPoint获取该位置对应的窗口句柄。接着,通过GetWindowThreadProcessId获取窗口所属的进程ID,并使用OpenProcess打开该进程。最后,通过GetModuleFileNameEx获取进程的可执行文件路径并输出。代码中使用了Qt的qDebug进行日志输出,但可以移除以消除对Qt的依赖。整体代码简洁,功能明确,适用于获取窗口进程信息的场景。

2025-05-26 09:49:14 212

原创 Qt5.x升级6.x应注意http请求头大小写的问题

在Qt中发起HTTP请求时,Qt 5.x和Qt 6.x在处理请求头时存在差异。Qt 5.x会原封不动地发送开发者设置的请求头,而Qt 6.x会将请求头的名称转换为小写后再发送。根据HTTP协议,请求头名称是不区分大小写的,且应默认统一为小写。Java后端在处理HTTP请求时,对请求头名称的大小写不敏感,而某些Python Web框架(如Flask)则对大小写敏感。目前,无法禁止Qt 6.x将请求头名称转换为小写,只能通过调整服务端代码来适配这一变化。

2025-05-23 11:28:22 417

原创 Skia如何在窗口上绘图

WM_PAINT消息 当系统需要重绘窗口时,会向窗口发送 WM_PAINT 消息, 比如窗口大小改变或应用程序内调用InvalidateRect系统API(强制重绘窗口)时,系统都会向窗口发送WM_PAINT 消息。窗口创建成功后,窗口的消息处理函数会陆续收到与窗口有关的消息,比如窗口大小调整消息(WM_SIZE), 窗口重绘消息(WM_PAINT)等。改变窗口大小会更新全局变量 w 和 h ,会触发窗口的重绘消息,会重新执行paint方法,重新创建像素数组,重新在窗口右下角绘制矩形。

2025-05-22 13:51:49 570

原创 桌面端截长图/滚动截图:图像融合拼接关键算法

文章摘要:本文介绍了在窗口滚动前后,通过图像处理技术实现图像拼接的关键步骤。首先,在滚动前后分别对窗口进行截图,然后通过OpenCV或自研算法找到两个子图像的相似区域。OpenCV算法通过模板匹配找到最佳匹配位置,而自研算法则利用多线程计算误差,找到最小误差的匹配区域。最终,通过确定相似区域的位置,实现两个图像的拼接。文章强调,不应通过计算鼠标滚轮滚动的高度来确定窗口内容的变化,因为不同窗口的行进高度可能不同。

2025-05-16 13:53:08 351

原创 Qt6.x检查网络是否在线(与Qt 5.x不同)

Qt 6.x.x 废弃了 QNetworkConfigurationManager,此时要判断客户端网络是否联通需要使用:QNetworkInformation。

2025-05-09 14:16:23 504

原创 C++ 如何在一个方法中返回多个不同类型的数据

int number;return 0;这种方法就更麻烦了,不过要返回很多数据时,这个方法能更清晰的表意。

2025-05-07 13:15:06 291

原创 【自荐】体积小,速度快,对开发、测试人员友好的截图软件

ScreenCapture 截图工具、仅一个可执行文件,无需安装,不依赖任何。运行速度快、内存占用低、CPU 使用率低。

2025-05-06 10:21:12 381

原创 使用zxing-cpp生成与识别二维码(支持中文)

使用zxing-cpp生成与识别二维码(支持中文)

2025-05-02 11:34:16 425

原创 Windows 遍历桌面上的窗口,得到窗口矩形(修正矩形间隙)

【代码】Windows 遍历桌面上的窗口,得到窗口矩形(修正矩形间隙)

2025-04-18 14:31:11 142

原创 Qt 仅绘制半个像素的边框(现象及解决方案)

也就是说,你必须明确告诉Qt,你想绘制0.5像素的边框,而且你绘制的内容会在你的画布上。边框粗细也会跟着变大,但虽然设置的边框粗细是6,实际看到的也只有3个像素的宽度。虽然我们设置了边框粗细为1像素,但实际上绘制的这个矩形的边框只有0.5像素。你仔细看的话,会发现上图右侧边框已变得粗一些了。这是无论你怎么拖动改变窗口大小,边框也不会消失。这个现象其实很容易理解,我就不总结了。(并不是所有时候都会被忽略)当我们把边框粗细调大。

2025-04-11 14:52:46 196

原创 把一个半透明窗口嵌入Windows桌面并转发系统鼠标消息到窗口

当窗口嵌入桌面时,Qt的事件处理机制是接不到鼠标消息的,你只能在onEmbed....方法中手动处理。现在这个窗口的所有消息都会被转发到 WNDPROC oldProc;把窗口从嵌入状态恢复为非嵌入状态,最简单的办法就是把这个窗口关了,重新创建一个。当窗口未嵌入桌面时,不应该注册输入设备。窗口在桌面背景前面,在桌面图标后面。

2025-04-10 08:27:00 221

原创 Windows注册鼠标钩子,获取用户选中的文本

上述代码中MouseProc方法用于处理系统的鼠标消息。

2025-04-07 17:14:35 552

原创 Qt在高分屏下播放gif动画模糊问题的解决方案(支持gif缩放)

然而用这种方案在高分屏下播放 gif 动画会导致动画模糊。

2025-04-01 09:27:34 237

原创 轻量级 Qt无边框、带阴影、可变大小窗口方案(Windows)

这个消息主要是用于让窗口聚焦,不然 在最小化窗口后再通过点击任务栏,显示窗口,此时鼠标移入 setSystemButton 设置的组件(自定义 QWidget ),无法触发此组件的 enterEvent。这段代码用于设置窗口位置、大小,并显示窗口,注意,必须等设置完阴影效果,移除边框之后,才能设置窗口大小并显示。这段代码用于设置窗口最大化的尺寸,避免窗口最大化时,把任务栏都盖住了。这段代码鼠标双击自定义标题栏区域时,切换窗口最大化,最小化的状态。这段代码用于在窗口最大化状态切换时改变最大化按钮图标。

2025-03-28 11:40:06 444 4

原创 Qt窗口最大化后无法还原的问题及解决方案

这是 Qt 在无边框窗口 (Qt::FramelessWindowHint) 下的一个已知问题。无边框窗口在 showMaximized() 后,由于缺少标准的窗口管理机制,Qt 无法正确地恢复窗口大小。此方案原理就是把窗口的FramelessWindowHint属性拿掉,再改变窗口的大小,再把FramelessWindowHint窗口属性加回去。值得注意的是,setWindowFlags() 之后需要 show() 以应用更改,否则窗口可能不会更新。都不能改变窗口的大小。

2025-03-26 12:31:45 238

原创 Qt把图像写入剪切板会导致内存泄漏的解决方案

Qt把图像写入剪切板会导致内存泄漏的解决方案

2025-03-21 11:07:12 164

原创 系统API得到的屏幕坐标与Qt得到的屏幕坐标不一致,怎么办?

在获取鼠标屏幕坐标时,系统API和Qt API在高分屏下会得到不一致的结果,因为Qt的坐标考虑了屏幕缩放比例。系统API使用GetCursorPos获取坐标,而Qt使用QCursor::pos。为了将系统坐标转换为Qt坐标,可以使用getQtPoint函数,该函数通过MonitorFromPoint和GetDpiForMonitor获取屏幕的DPI缩放比例,并将系统坐标除以缩放比例得到Qt坐标。然而,如果坐标不在屏幕上,转换可能会出现问题。

2025-03-19 14:51:55 229

原创 Qt跨屏窗口的另一个解决方案

前面我写了一篇文章:《Qt跨屏窗口的一个Bug及解决方案》,里面提到了一个用QImage做画布的方案。必须这样做,才能让窗口真正的覆盖用户的整个桌面(覆盖所有屏幕)。第二步,使用Qt API设置窗口位置和大小,并显示窗口。第一步,用系统API得到整个跨屏桌面的位置和大小。第三步,再使用系统API设置一遍窗口的位置和大小。

2025-03-17 14:05:11 207

原创 Qt把字符串转型为字体图标的编码,并绘制字体图标

但有的时候字体图标的编码是放到数据库里的,此时就得考虑把字符串转型为QChar再绘制图标。上图中16进制的Unicode就是图标的编码,绘制图标的代码如下。绘制字体图标,只要得到图标在字体里的编码,就可以直接绘制。

2025-03-10 11:51:44 257

原创 在QImage和QPixmap上绘图,哪个快?快多少?

在QPixmap上绘图时间(30毫秒左右)大概是在QImage上绘图时间(45毫秒左右)的65%左右。多次测试得出结论:在QPixmap上绘图更快。测试环境:Qt 6.8.2,OS Win10。

2025-03-06 08:26:26 118

原创 Windows窗口程序向控制台输出信息的两种方案

用户双击exe时,除了打开程序窗口外,你还希望打开一个控制台窗口,用于输出调试信息。AllocConsole方法负责创建一个Console窗口。

2025-03-01 13:49:01 311

原创 如何编译 Skia 源码

只有把 Skia 源码编译成应用程序库才能在应用程序中使用 Skia。本文介绍如何在 Windows 操作系统下编译 Skia 源码。Skia 兼容很多平台,在其他平台下编译 Skia 源码的方式与在 Windows 平台下编译 Skia 的方式大同小异,没办法在这里把所有平台的编译步骤都一一介绍一遍,不过,相信本章内容将有助于读者完成在其他平台上编译 Skia 的工作。

2025-02-26 15:14:32 871

原创 使用系统API播放在线视频,编译产物15kb

【代码】使用系统API播放在线视频,编译产物15kb。

2025-02-25 13:52:00 250

原创 Skia如何在图像文件上绘图

从本文开始,我将正式使用 Skia 库绘图。本章先介绍了如何使用本系列文章的源码库(以后所有章节的源码都是按照这个方式使用的)。随后介绍了如何在一个图像文件文件中绘制一个简单的矩形。由于是第一次使用 Skia 库绘图,所以本节介绍会详细一些,希望大家能顺利入门。

2025-02-24 15:23:55 687

Electron包安装过程解析pdf

本文详细讲解了Electron依赖包被安装到项目中所经历的各个环节,并详细介绍了Electron依赖包对二进制可执行文件的缓存机制以及版本控制原则。

2020-10-27

ASP_NET服务器控件与组件开发

ASP_NET服务器控件与组件开发,说的很详细 有很好的模型图,外国人写的

2008-10-22

空空如也

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

TA关注的人

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