自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QT6+VS2022开发环境安装

本文主要介绍了Qt6安装教程(使用国内源),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值为什么离线包没了?Qt6开始非商业授权下,不再提供离线安装方式的exe,但源码安装费时费力,所以推荐安装方式已经为在线组件安装方式,包括vs2022、Qt在线安装工具已经成为开发工具新的安装趋势。Qt是不是要放弃开源?NO。

2024-04-03 15:52:12 1321

原创 mupdf渲染过程(一):颜色

对于Mupdf颜色转换,总体过程总结如下颜色空间初始化->初始化mupdf定义的5种颜色空间->判断是否icc模式(如果是)->使用mupdf定义pro文件初始化数据->调用lcms函数生成profile句柄。颜色空间转换->生成转换器->判断是否icc模式(如果是)->创建icc转换句柄->调用lcms生成句柄->根据转换器转换颜色空间->调用lcms转换接口。

2024-03-15 11:05:24 822

原创 RTF文件格式解析(二)图像问题

出现在文档头的图形将具有一个独立的Z-ORDER顺序,与主文档中的Z-ORDER顺序相区别。{ \shp ............控制字后面紧跟{ \*\shpinst,而{ \*\shpinst控制字后面跟随一个图形的所有属性列表。这个值必须为一个偶数值,因为Windows图形设备接口(GDI)总是假定一个位图的位的值构成一个整形(2字节)的数组值。\shp 表示这是一个绘图对象,\pngblip表示png格式,图像数据信息:对象属性的\sn为pib,表示二进制图像数据,数据位于\sv内。

2024-02-27 10:41:34 1091

原创 PDF文件格式(二):交叉引用类型“O“

N表示需要解析的次数,每次解析的内容是交叉引用obj号和stream解压之后需要解析的位置(ofs);最后交叉引用obj内容对应的解析位置是base+ofs,解析的内容是一个pdf的基本类型内容即可。1. 获取交叉引用相关信息,先拿到其对应的ofs值,正常交叉引用的ofs表示对应obj的位置,但是这里ofs表示此交叉引用的信息被保存位置所在的obj位置;type为"o"类型的引用在PDF文件中不能够直接找到对应的obj,它被以压缩的形式内嵌在其他的obj内,因此此类型的引用解析比较麻烦;

2024-02-20 18:17:45 742

原创 C语言的malloc(0)问题

malloc这个函数,会有一个阈值,申请小于这个阈值的空间,那么会返回这个阈值大小的空间。首先来解释malloc(0)的问题,这个语法是对的,而且确实也分配了内存,但是内存空间是0,就是说返回给你的指针是不能用的,感觉奇怪吧?既然malloc另外分配内存来维护该内存块(算法链表占用大小),也就是说分配来用于维护该内存块的内存的大小也是有限的,那么到底是多少呢?还有,返回的指针是可用地址的起始地址,可用大小是固定的,在VC6下是56字节,这个大小可能就是链表的大小。如果申请一个负数,那么返回的是0,如下图。

2024-02-06 17:32:32 448

原创 PDF文件格式(一):交叉引用流

可以看到,在PDF尾部的startxrf的是572618,对应的位置是8bcca,正好是116 0 obj,这里的Index是[1 1 4 1 12 1 106 11],表示这段交叉引用表保存的是1号obj,4号obj,12号obj,106号至117(106+11)号obj(106,107,108,109....117);PDF交叉引用表是PDF的重要组成部分,本文介绍的是新交叉引用表,这种引用表的格式是PDF的obj格式,内容是被压缩存放在obj下的stream中,因此比常规的引用表格式复杂。

2024-02-05 16:23:10 1220

原创 Linux下configure编译代码来龙去脉

比如:在config.h中定义一个宏 HAVE_TEST为1(2)运行autoheader,重新生成config.h.in文件(3)运行autoconf,重新生成configure文件(4)重新运行 ./configure,更新config.h文件需要项目维护者手动修改的文件除了可选的NEWS README AUTHORS ChangeLog文件之外,就是configure.ac文件和每个源码文件夹下的Makefile.am文件了。

2024-02-02 11:55:44 1039

原创 RTF文件格式解析(一)文本编码

RTF文件可以存储任何文字,可是他们都是怎么存吃在文档中呢,阅读器是怎么识别出哪些文本属于什么编码呢在指定RTF版本后你必须定义在这个文件中使用的字符集。字符集控制字必须在任何纯文本或任何表控制字之前。RTF规格说明目前支持下列字符集。ANSI (默认)字符集规定了RTF文本以什么样的编码存在文件内,目前版本的RTF默认是ANSI编码的,但是,如果保存汉字或者其他文字,ANSI编码就不够用了。Word 2002支持Unicode。文本支持使用16位Unicode字符编码方案。

2024-01-31 17:37:50 1203

原创 一文读懂编码(ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE)

第一二个字节、第三四个字节的起始部分的都是”110″和”10″,正好与UTF8规则里的两字节模板是一致的,于是再次打开记事本 时,记事本就误认为这是一个UTF8编码的文件,让我们把第一个字节的110和第二个字节的10去掉,我们就得到了”00001 101010″,再把各位对齐,补上前导的0,就得到了”0000 0000 0110 1010″,不好意思,这是UNICODE的006A,也就是小写的字母”j”,而之后的两字节用UTF8解码之后是0368,这个字符什么也不是。这样做,也有弊处,尤其体现在网页中。

2024-01-31 11:09:14 995

原创 STL unordered_map中自定义key的约束

开始之前,先上。

2024-01-10 11:37:39 380

原创 VS2019 报错“常量中有换行符” 错误原因分析

情况2,在1的情况下读取0x96之后,MSVC期待读入GBK编码的尾字节(0x40-0xFE),但是接下来读取到的0x20不在这个范围内,这不是个合法的GBK字符,所以MSVC把第一个字节0x96强制改为0x3F,即ASCII编码的问号,然后丢弃第二个字节0x20,继续编译,提示一个警告表示编码有问题。情况1,MSVC读取前两个字节0xE4B8,认为这是一个GBK字符"涓",然后读取0x96,这个字节在GBK的首字节范围(0x81-0xFE)之内,所以MSVC认为这是个双字节汉字,后面还有一个字节。

2024-01-06 15:04:00 1418

原创 git 命令同步主干代码到分支

这样就完成了将主干代码同步到分支的操作。请记住在进行这些操作之前,最好先备份你的代码或者在一个安全的环境中进行操作。4. 确保你已经提交并推送了当前分支的所有更改。3. 确保你已经将主干代码的最新更改拉取到本地。5. 将主干代码合并到当前分支。1. 确保你当前在分支上工作。

2023-11-30 18:20:30 528

原创 图形视图框架基础

文本总结了Qt中的图形视图框架的基础知识,包括常用类、类图关系、图形视图框架的图标系统以及图形视图框架的事件处理和传播。

2023-11-29 18:09:47 56

原创 浅析Qt中的隐式共享

Qt中的许多C++类使用隐式数据共享来最大化资源使用并最小化复制。当作为参数传递时,隐式共享类既安全又高效,因为只传递一个指向数据的指针,并且只有当函数写入数据时,数据才会被复制,即write -on-write。​ 共享类由一个指向包含引用计数和数据的共享数据块的指针组成。​ 当创建共享对象时,它将引用计数设置为1。每当新对象引用共享数据时,引用计数就递增,当对象解引用共享数据时,引用计数就递减。当引用计数变为零时,将删除共享数据。​ 在处理共享对象时,有两种方法复制对象。

2023-11-29 17:28:50 37

原创 Qt中的内存管理机制

值得一提的是,之所以Qt中具有各种各样的内存管理方式,是因为它能够减轻开发者的负担,更加专注于业务代码的实现,而不是被内存问题折腾的焦头烂额。堆内存是另外一种管理方式。QPointer是防止悬挂指针(即野指针)的有效手段,因为所指对象一旦被删除,QPointer会自动置空,在使用时,判断指针是否为空即可,不为空说明对象可以使用,不会产生内存访问错误的问题。们知道Qt是C++的框架,C++是对C语言的扩展,所以C语言中的内存管理方式(堆、栈)和动态内存管理(堆内存释放问题)存在的问题,在C++中仍然存在。

2023-11-24 18:58:25 178

原创 STL 使用问题 -- 理解相等和等价的区别

关联容器的比较函数class Compare=std::less,默认的std::less只是简单的调用了元素对象的oparator

2023-11-24 18:00:14 52

原创 QT自己写一个调色板

困惑很久了,查了网上资料也没有自己想要的,就决定写一个自定义调色板。

2023-11-23 09:48:26 79

原创 STL容器选择的建议

vector,deque,list中选择:这三种容器提供了不同的复杂性,vector是默认应使用的序列类型;在选择容器时需要全盘考虑,需要关心元素的排列情况、迭代器的能力、元素布局与C接口的兼容性、查找速度、引用计数所引起的反常行为、以及迭代器在何种情况下失效等等。如果是,就要考虑哈希容器、排序的vector、有序的关联容器 -- 或许这就是优先顺序。标准库中现在有13种容器 STL 概述,可作出选择有很多,选择的多样性也意味着在选择时需要考虑多种因素。如果是,就需要使用基于节点的容器。

2023-11-22 18:47:02 15

原创 Qt 的QObject原理描述

connect函数相当于做了信号处理动作的注册信号和槽是一种松耦合的机制,发送信号的对象不知道也不关心接收信号的对象是谁,接收信号的对象也不知道也不关心发送信号的对象是谁。Q的元对象系统保证了信号和槽机制的正常运行。Qt使用MOC(Meta Object Compiler)来生成元对象的代码,MOC是一个预处理器,它会扫描含有Q_OBJECT宏的类,并生成相应的元对象代码。Qobject是QT中的一个基类,它是所有QT对象的父类,它提供了一些基本的功能,比如信号和槽、属性系统、元对象系统等。

2023-11-14 14:56:07 54

原创 QObject与线程QThread的关系

当你创建一个以另一个对象为父对象的 QObject 时,该对象会自动将自己添加到父对象的children () 列表中。请注意,发布到此对象的任何新事件都将在targetThread 中处理,前提是它不是nullptr: 当它是时nullptr,不会发生对该对象或其子对象的事件处理,因为它们不再与任何线程相关联。注意:如果 QObject 没有线程亲和性(即如果thread () 返回零),或者如果它存在于没有运行事件循环的线程中,则它无法接收排队信号或发布的事件。更改此对象及其子对象的线程亲和性。

2023-11-14 14:41:15 45

原创 qt工程文件中的编译环境判断

我们使用qt进行工程编译时,经常会因为环境不同,而导致编译错误的情况,引用头文件路径不对,链接库文件不存在,这样或那样的问题。

2023-11-13 14:23:28 133

原创 STL使用建议

而且,成员函数begin()、end(),rbegin()、rend()、front()、back()、data()、find()、lower_bound()、upper_bound()、equal_range()、at()和除了关联容器中的operator[]对于线程安全的目标表现如同const(即它们亦能同时在同一容器上由不同线程调用)。上面第2点建议容器中存放指针而不是对象,这就带来了这个问题,从这样的容器中删除某个元素时,这个元素指针所分配的堆内存并不会释放,需要我们自己去释放。

2023-11-10 17:41:22 19

原创 删除算法选择

remove()移除元素的方式和从字符串中移除空格的方式相似,都是通过用匹配元素右边的元素来覆盖匹配元素的方式移除元素。还有一种间接的做法是:使用remove_copy_if和swap配合使用,利用remove_copy_if将原始容器中保留的元素copy到一个新容器中,然后再将新容器swap到原始容器中,但效率低,不推荐。这被叫作erase-remove,执行删除操作后,iter指向最后一个元素之后的位置,所以它标识了被删除序列的第一个元素,被删除序列的结束位置由std::end(words)指定。

2023-11-10 17:31:52 29

原创 正确选择搜索算法

如果使用lower_bound(如果能找到则返回第一个的位置,如果没有找到,就返回这个元素应该插入的位置),判断返回的这个迭代器,if(retIter!=last&&*retIter==value),这里有一个错误,*retIter==value,就是这句,lower_bound是等价搜索的,多数情况下,等价和相等结果是相同的,但是不一致的情况也是会有的,参考理解相等和等价的区别,这种情况下,这代码是错的。正确做法是检查lower_bound返回的迭代器所指的对象是否等价于你要的查找的值。

2023-11-10 17:27:55 19

原创 (STL哈希) _ unordered_set

与 std::set 不同,std::unordered_set 中元素的顺序是不确定的,它使用哈希函数来快速访问、插入和删除元素。哈希函数将元素的键转换为一个哈希值,然后用该哈希值来映射到对应的桶中,每个桶中存储一组键值相同的元素。当需要访问、插入或删除某个元素时,首先根据哈希函数计算出该元素对应的桶的位置,然后在该桶中查找该元素。查找元素的时间复杂度取决于哈希函数的质量,最坏情况下会退化为线性时间复杂度 O ( n ) O(n)O(n)。元素的顺序是不确定的,不能保证元素的插入顺序就是元素的访问顺序。

2023-11-09 18:16:13 50

原创 (STL哈希)unordered_map

unordered_map是C++标准库中的一个关联式容器,它是基于哈希表实现的。unordered_map提供了一种存储键值对的方式,每个键唯一对应一个值。它被设计为在平均情况下具有常数时间复杂度的插入、查找和删除操作。unordered_map与map的用法类似,但其内部结构不同。unordered_map使用哈希函数将键映射到桶(bucket)中,并在桶内使用链表或其他数据结构解决冲突。通过哈希函数和桶的结构,可以快速定位键对应的值。⭕函数特点。

2023-11-09 18:01:52 41

原创 STL如何选择算法

比如关联容器中的set::find,和算法的std::find(这个在理解相等和等价有提到过结果不同),不仅如此,实现的方式也不同,关联容器的set::find是对数时间运行,而算法的std::find是线性时间。这些算法为了完成自己的任务,在其内部都是循环。std::merge和list::merge,合并两个容器,std::merge,将两个容器中的合并带第三个上面,不允许修改其两个元区间,而list::merge总是在修改它所操作的链表。而std::remove却没有,还需要list::erase。

2023-11-08 17:39:17 23

原创 慎重选择排序算法

这时候暗箱操作一下,你是教计算机的老师,你希望计算根据C++单科成绩靠前的来(你早就想到了这一天,你都学生们打分的时候就没有重复的),你可以重写一个按C++单科比较的比较函数,做一个全排列,然后再用上面的两个函数排出前10个,这时候你发现一个问题,可能选出的5个人不是C++单科成绩靠前的,因为partial_sort、nth_element都不是稳定排序的操作。对于排序,首先想到是sort和qsort,这两个首选sort,因为sort传入比较的函数对象,而qsort传入比较函数的指针,会多函数调用的过程。

2023-11-08 17:36:34 18

原创 OFFICE一些操作技巧

在我们要输入日期的单元格中,输入公式函数“=today( )”,然后输入当前系统日期。直接在输入法中输入“框”字,我们可以找到一个“□”,按“F4”快速输入“□”,无需手动打字或一一复制。之后将鼠标光标定位在需要翻页的文档上,按下快捷键“Ctrl Enter”即可快速翻页。在这篇文章中,我将分享四个可以帮助您更好地玩转 Office 的操作技巧,让您的工作效率得到进一步提高。我们一起来看看,首先将鼠标光标置于需要分页的文档位置,鼠标左键点击“插入”-“分页”-“分页”。对齐左边的线,双击到达最左边;

2023-11-07 13:28:41 37

转载 白话电子签章原理及风险

5.小明签字的内容即H对应的内容,其他人会再对文档做一次摘要计算,得到一个当前文档摘要h, 如果解密后的摘要H 与 当前文档内容的摘要h一致则证明,小明用私钥B加密(签名)的内容就是这份文档。1. 小明自己偷偷的生成一对儿秘钥AB,然就他对其他人说 “我生成了一对非对称秘钥AB,B除了我本人谁都不会知道,打死我,我也不会说”,即B这个秘钥只有小明知道,对于不认识小明的人来说,可以认为掌握秘钥B的人就是小明。2. 按的指印,写的签名,与纸张上的其他内容,是绑定的(因为同一张纸上,无法拼接,复制)。

2023-11-04 14:59:08 48

原创 PDF文件结构之签章

adbe.x509.rsa_sha1(数字证书+P1签名):实际场景俗称裸签,哈希算法不一定是SHA1,有可能是SHA256。遇到了一个验滴滴发票的需求,就是用的SHA256做哈希,修改了itext源码来支持验签章的。840-960:是需要预留用于放签名数据的,具体预留多少,可以无限大,缺点就是最终文件会很大;0-840:是签名原文的第一部分,这一部分会放一个图片,和原数据一起成为签名原文;示例:[0,840,960,240],0和960是偏移量,840和240是长度。

2023-11-04 14:34:17 833 1

原创 Excel常用的操作小技巧

比如A1:A1000单元格都有数据内容,我们在AI单元格按下Ctrl+Shift+向下方向键,即可快速选中A1:A1000单元格区域,不用再按住鼠标左键不放一直持续的向下拖动选取数据区域。使用&标志可以连接单元格区域(包括非相邻单元格区域),以图1所示,要将AB两列数据组合起来,在A1单元格输入=A1&B1,然后向下填充即可。Ctrl+shift+5可快速添加“%”符号,如下图所示,选中B2:B14,然后同时按下Ctrl+shift+5即可一键添加“%”符号。开始-插入-直线,如下图所示,划出两条斜线。

2023-10-19 10:24:25 70

原创 这11个Excel操作技巧,除最后一个,其他都是天天用

下图的工资表中,代扣养老金一列因为文字多,就会显得特别宽,和整体的表格列宽不协调了。选中所有单元格,在编辑栏输入数据,按下Ctrl键的同时,按Enter键。其实很简单:只要选中数据区域,然后按组合键,妥妥滴了。输入姓名时,不但有三个字的姓名还有两个字的姓名,你还在用空格对齐吗?还可以选中数据区域之后,快速缩放到选定区域,在做报告时可以露一手哦。平时输入的日期数据,往往看起来七长八短,如何让日期数据整齐美观呢?在一列中设置好公式之后,选中公式区域,按Ctrl+C复制。

2023-10-17 09:34:26 126

原创 WORD基础教程

在WROD中可选的打印纸张大小都是固定的,一般最常用的办公纸是A4的、也有一些特别的单位用A3(A3的纸是两个A4合并起来的大小)的纸张和B5的纸张。本教程以解决在使用OFFICE办公软件实用的问题为引导,从最基础的使用知识一点点的深入,最后到熟练使用OFFICE办公软件。如果有要求页边距必须是指定的宽度时,要点开自定义页边距后,再输入上边距、下边距、右边距和右边距的指定宽度(单位厘米)。(页边距是指文字与纸张四周空白的距离,分别是左边距和右边距。默认的是纵向的,点开纸张方向图标直接选择纵向可是横向即可。

2023-10-16 11:02:02 98

原创 贝塞尔曲线代码实现

一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。%分别确定a,b,c三个系数。b: (N - 1) 递减到 0 (b 为 1-t 的幂)c: 0 递增到 (N - 1) (c 为 t 的幂)

2023-10-12 10:49:19 134

原创 gcc编译及运行时的搜索路径

2、通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)2、然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH。3、再找内定目录 /lib:/usr/lib: /usr/local/lib:这是当初compile gcc时写在程序内的。1、在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。1、gcc会去找-L。

2023-10-11 19:30:27 645

转载 Unicode(UTF-8, UTF-16)令人混淆的概念

英文字母再加一些其他标点字符之类的也不会超过256个.一个字节表示主足够了.但其他一些文字不止这么多 ,像汉字就上万个.于是又出现了其他各种字符集.这样不同的字符集交换数据时就有问题了.可能你用某个数字表示字符A,但另外的字符集又是用另外一个数字表示A.这样交互起来就麻烦了.于是就出现了Unicode和ISO这样的组织来统一制定一个标准,任何一个字符只对应一个确定的数字.ISO取的名字叫UCS(Universal Character Set),Unicode取的名字就叫unicode了.

2023-10-11 19:26:54 43

lcms小颜色管理系统说明文档

小颜色管理系统。使用此库,您可以启用应用程序使用国际色彩联盟(ICC)配置文件。

2024-03-14

linux下C++调试技术

linux下调试技术,几乎涵盖了平时所有能用到的调试方法及其工具

2023-11-08

C++编译期计算.ppt

C++编译期计算

2023-11-02

操作系统思考电子书阅读

操作系统思考电子书阅读

2023-10-30

mupdf内部实现及接口说明

mupdf内部实现及接口说明

2023-10-17

C++ GUI Programming with Qt4 Second Edition.pdf

C++ GUI Programming with Qt4 Second Edition.pdf

2023-10-12

C++进阶,迈向C++高级世界

C++进阶,迈向C++高级世界

2023-10-12

mysql常见面试题一览

mysql常见面试题一览

2023-10-11

空空如也

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

TA关注的人

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