![](https://img-blog.csdnimg.cn/0da19cf6e1b843759743ac3ce22b0a75.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 68
C++是C语言的超集,是一门经久不衰的语言,语法灵活,能非常方便与其它语言对接,是开发基础库的不二之选。
插件开发
熟练开发PS插件、AI插件、AE插件、CDR插件、3DMax插件和其它各类插件。
展开
-
c++-msys2程序工作原理?
综上所述,MSYS2 能够在 Windows 上运行“类 Linux 程序”的原理在于它既提供了模拟 POSIX 环境的组件,又结合了编译生成原生 Windows 可执行文件的能力。通过这样的方式,开发者可以在 Windows 上获得类似 Unix/Linux 的开发体验,并且能够构建适用于 Windows 平台的应用程序。MSYS2 是一个为 Windows 用户设计的 Unix-like 开发环境和命令行接口,它允许用户在 Windows 上编译和运行许多原本为类 Unix 系统设计的软件。原创 2024-04-21 15:29:03 · 401 阅读 · 0 评论 -
PIMPL-C++-设计模式-私有化对象-类成员变量初始化-类的私有成员-Q_FOREACH
是Qt库中的宏定义,主要在C++中用于标记符号(如类的成员函数或变量)为“隐藏”,在Windows和其他一些平台上,它会使得这些符号在生成的DLL或库中不可见,仅对当前编译单元可见,有助于隐藏实现细节,防止API污染,同时也能够避免因ABI(应用程序二进制接口)变动导致的问题。这样,当实现类的细节发生变化时,只要接口(即原始类)不变,就不会影响到直接使用这个类的客户端代码,从而避免了大规模的重新编译,提升了编译效率。,所以如果你使用的是C++11或更新的标准版本,这个初始化方式也是完全有效的。原创 2024-04-20 14:58:17 · 938 阅读 · 0 评论 -
CMake语法-include(FeatureSummary)-可选特性和组件-configure_file-配置文件-#cmakedefine
include(FeatureSummary) 是引入CMake的一个模块,该模块允许开发者追踪项目的可选特性和组件,并在配置时输出一个简洁的特性概览。原创 2024-03-29 09:14:44 · 642 阅读 · 0 评论 -
Win32-C++-虚拟键码-扫描码-GetAsyncKeyState-MapVirtualKey-键盘编码
GetAsyncKeyState获取的是按键的实时状态,而GetKeyState获取的是最近一个消息从线程的虚拟输入队列取走时该按键的状态,简单来说,就是窗口的消息循环在调用下一个GetMessage或PeekMessage前,使用该函数对特定按键的查询都返回的是同一个值,不管在调用下一个GetMessage或PeekMessage前用户是否按下了该键。虚拟键码与具体的键盘硬件无关,同一功能的键在任何兼容的键盘上,其虚拟键码都是固定的。:是键盘硬件层面产生的原始编码,它直接对应于键盘上每一个物理按键。原创 2024-03-29 09:13:44 · 1407 阅读 · 0 评论 -
ubuntu22.04-调试程序-VSCode-CMake构建项目-常用目录-C++
Krita 是一款专业的数字绘画软件,而这里显然是一个开发者为调试其源代码编写的调试配置。:调试的目标可执行文件路径,开发者需要根据实际情况修改为Krita的实际安装或构建生成的可执行文件位置。项目的CMake配置,包括了源代码组织结构、库的类型(共享库)、源文件列表及库的输出路径等关键设置。在CMake中,有几个关键的目录变量用于定位项目源代码和构建输出的位置。:表示调试会以启动模式运行,即VSCode将启动指定的程序进行调试。:定义了这个调试配置的名称,在VSCode调试面板中显示。原创 2024-02-29 09:11:15 · 705 阅读 · 0 评论 -
ubuntu22.04-cmake-添加动态库-静态库-添加头文件夹所在位置-管理员启动
该命令可以指定目标(exe或者so文件)需要包含的头文件路径,命名为 < target > 的命令必须是由 add_executive ()或 add_library ()之类的命令创建的,并且不能是 ALIAS 目标。命名的必须是由add_executable()或add_library()之类的命令创建的,并且不能是ALIAS目标。目标依赖项的使用要求会影响其自身源的编译。PUBLIC 在public后面的库会被Link到你的target中,并且里面的符号也会被导出,提供给第三方使用。原创 2024-02-18 08:26:48 · 321 阅读 · 0 评论 -
ubuntu22.04-编译安装Qt5.15.3-C++
如果您是在2024年执行此操作,请务必检查Qt 5.15源代码与当前Ubuntu 22.04系统组件的兼容性,以及是否有新的已知问题需要解决。如果有可能,建议升级到更高版本的Qt,或者寻找社区维护的适用于Ubuntu 22.04的Qt 5.15 PPA。在Ubuntu 22.04 LTS(Jammy Jellyfish)环境下编译Qt 5.15,由于Ubuntu 22.04的官方仓库不再提供Qt 5.15系列的支持,您需要从源代码编译。访问Qt官网的Archive部分下载Qt 5.15的源代码包,例如。原创 2024-02-07 08:10:56 · 1599 阅读 · 0 评论 -
QTabletEvent-Qt-如何使用数字手写板,并捕获相关事件?
是处理来自图形平板设备输入的事件类。当用户使用数位板(如Wacom等品牌)与应用程序交互时,这些事件会被发送到相应的QWidget或其子类上。如果你想要在QWidget中捕获并响应来自数位板的输入,例如压力、倾斜角度、旋转信息或者精确笔触,你需要重载QWidget的相关事件处理函数来处理。函数会捕获所有类型的平板事件,并根据不同事件类型输出相关信息。你可以根据实际需求修改此函数以实现具体功能,比如绘画应用中的压力敏感绘图等功能。以下是一个简单的例子,在一个自定义的QWidget中处理。原创 2024-02-06 11:26:24 · 527 阅读 · 0 评论 -
Qt-互斥量-临界区-QMutex-QMutexLocker-QReadWriteLock
是Qt提供的一种便捷类,用于自动管理QMutex对象的锁定和解锁过程,可以有效避免忘记解锁互斥量导致的死锁问题。是Qt提供的互斥量类,它实现了互斥锁的功能。当一个线程对某个资源进行访问时,可以使用QMutex进行锁定,这样其他尝试获取该锁的线程将被阻塞,直到拥有锁的线程释放它。在一个多线程环境下,通常会有多个读取者线程同时访问共享资源(但不能同时有写入者),而写入者线程在进行写操作时需要独占资源。是Qt中提供的一种更为灵活的锁机制,它允许更高的并发性,因为它区分了读锁和写锁。原创 2024-02-02 11:25:34 · 973 阅读 · 0 评论 -
ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识
动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态库是目标文件的集合,目标文件在动态库中的组织方式是按特殊的方式组织形成的。在动态库中函数和变量的地址是相对地址而不是绝对地址,其真实地址在调用动态库的程序加载时形成的。动态库的名字有别名(soname), 真名(realname)和链接名(linkername)。别名是由一个lib前缀,然后是库的名字,最后以“.so”结尾来构成。原创 2023-12-12 08:41:10 · 1241 阅读 · 0 评论 -
ubuntu-更改镜像源-系统初始化-安装Clion-C++编译环境-Java安装
熟练使用VS开发C++的同学,可以直接在windows下进行开发,必须使用标准C++,不要使用windows sdk相关的库和接口,然后在ubuntu下进行调试梳理,一般建议直接在ubuntu下开发,这样可以最大限度的减轻相关工作量。原创 2023-12-11 09:31:45 · 669 阅读 · 0 评论 -
boost-字符串处理-判断-查找-裁剪-删除-替换-分割-合并
分类函数:is_space、is_alnum(字符和数字)、is_alpha(字母)、is_cntrl(控制符)、is_digit(十进制)、is_graph(图形字符)、is_lower(小写)、is_upper(大写)、is_print(可打印字符)、is_punct(标点符号)、is_xdigit(十六进制)、is_any_of(是否是序列中的任意字符)、if_from_range(是否位于指定区间,包括两头)to_lower:将原来字符串,转换为小写字符串,原来字符串改变。原创 2023-12-05 11:39:29 · 1238 阅读 · 0 评论 -
boost-filesystem-删除复制文件-设置文件权限-递归创建删除复制文件夹-解析文件名-C++
boost::filesystem是Boost C++ Libraries中的一个模块,主要作用是处理文件(Files)和目录(Directories)。该模块提供的类boost::filesystem::path专门用来处理路径。而且,该模块中还有很多独立的函数能够用来执行创建目录、检查文件是否存在等任务。原创 2023-12-03 10:06:16 · 1223 阅读 · 0 评论 -
win32-注册表-32位-64位-读写值-Qt-C++
注册表,是windows系统保存配置的地方,64位系统为了兼容32位,又做了许多兼容的设计,才出现了这些过渡的配置。原创 2023-10-20 08:12:04 · 420 阅读 · 0 评论 -
C++-Win32-共享内存-传递数据-进程隔离
通过使用共享内存将数据传递到目标进程,目标进程使用完毕之后,返回结果,主程序读取结果,释放共享数据。更复杂的端对端通信,可能采取更复杂的方式来通信。原创 2023-10-08 09:35:01 · 296 阅读 · 0 评论 -
C++-win32-SendMessage-最简单的进程间消息传递-消息钩子
使用消息钩子会出现bug。原创 2023-09-28 10:46:05 · 563 阅读 · 0 评论 -
Qt-QImage-convertTo-copy-convertToFormat-格式转换
QImage是Qt中复杂的图像处理对象,有利于生成指定图像结果。原创 2023-09-26 12:34:34 · 401 阅读 · 0 评论 -
Qt-键盘消息的传递-键盘消息的获取-C++
QKeyEvent 类用来描述一个键盘事件。当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输人焦点的部件。QKeyEvent 的 key() 函数可以获取具体的按键,对于 Qt 中给定的所有按键,可以在帮助中查看 Qt: :Key 关键字。需要特别说明的是,回车键在这里是 Qt::Key_Return;原创 2023-09-20 11:47:10 · 1185 阅读 · 0 评论 -
Qt-QTransform-内存结构-仿射变换-工作原理-C++
QTransform是Qt中推荐的矩阵变换类。转换指定如何平移,缩放,剪切,旋转或投影坐标系,通常在渲染图形时使用。QTransform类支持矩阵乘法,加法和减法,并且可以流式传输和比较该类的对象。使用改对象时,需要清楚Qt视图使用的坐标系。逻辑视图和物理视图,都为x值向右增加;y值向下增加。QTransform类在此环境中使用。QTransform实现的矩阵乘法,点向量在前,乘以矩阵,依次实现变换效果。使用QTransform进行仿射变换时,一定要注意坐标空间,X向右为正,Y向下为正。原创 2023-09-08 18:02:27 · 612 阅读 · 1 评论 -
fatal error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
但是,计算机生成的代码或大量使用模板库的代码可能需要可存放更多节的 .obj 文件。只有 Visual C++ 2005(或更高版本)中提供的链接器才能使用通过 /bigobj 生成的 .obj 文件。/bigobj将该地址容量增加至 4,294,967,296 (2^32)。大多数模块将从来不会生成包含数超过 65,536 的 .obj 文件。默认情况下,对象文件最多可存放 65,536 (2^16) 个可寻址的节。属性>单击“C/C++”项。> 命令行 其它添加选项。原创 2023-08-03 09:25:50 · 1475 阅读 · 0 评论 -
c++-操作符重载-类成员函数重载-全局函数重载-符号重载
C++操作符重载,主要是扩展现有符号在自定义对象上的使用,符号重载时,不应该背离符号原有含义,使代码丧失可读性。原创 2023-07-25 16:43:46 · 538 阅读 · 0 评论 -
MessageBoxA-函数原型-消息提示-显示为顶层窗口
MB_DEFBUTTON2样式将默认焦点设置为消息框的第二个按钮,在本例中为“重试”按钮。如果消息框有“取消”按钮,则如果按下 ESC 键或选择“取消”按钮,该函数将返回 IDCANCEL 值。如果消息框没有 “取消 ”按钮,则按 ESC 将不起作用 - 除非存在MB_OK按钮。如果显示MB_OK按钮,并且用户按下 ESC,则返回值将为 IDOK。显示一个模式对话框,其中包含系统图标、一组按钮和一条简短的应用程序特定消息,例如状态或错误信息。若要指示消息框中显示的按钮,请指定以下值之一。原创 2023-05-28 12:00:40 · 1292 阅读 · 0 评论 -
Js-Base64-转文件对象-文件对象转Base64-数据交互
通过将二进制文件转Base64字符串,然后再通过JS将Base64字符串转Js内部文件对象,以此达到Js访问本地文件的目的。原创 2023-04-24 19:06:44 · 369 阅读 · 0 评论 -
win32-C++-自定义资源文件-读取-保存文件-rc-qt
头文件# pragma once //将自定义资源保存到文件 class ZLWin32CustomResource {public :实现文件//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可 HRSRC hRsrc = FindResourceW(NULL , resID , resType);//获取资源的大小 DWORD dwSize = SizeofResource(NULL , hRsrc);原创 2023-03-29 08:53:44 · 589 阅读 · 0 评论 -
win32-添加ATL支持-ATL头文件-CAtlFileMapping-共享内存的使用-c++-进程通信
通过简单的代码,就能跨进程,实现类结构的数据共享,这是使用CAtlFileMapping的优势,底层仍然是win32共享内存API的封装,感兴趣的读者可查看一下ATL源码。原创 2023-03-23 17:03:14 · 301 阅读 · 0 评论 -
libcef-JavaScript与C++通信-原理与实现-文档原文
Chromium和CEF使用V8 JavaScript引擎来实现内部JavaScript (JS)。浏览器中的每个框架都有自己的JS上下文,为在该框架中执行的JS代码提供作用域和安全性(更多信息请参阅“使用上下文”部分)。CEF为客户端应用程序的集成提供了大量的JS特性。在CEF3中,Blink (WebKit)和JS的执行在一个单独的渲染程序中运行。渲染器进程中的主线程被标识为TID_RENDERER,所有V8的执行都必须在这个线程上进行。原创 2023-03-16 09:35:08 · 630 阅读 · 0 评论 -
C++如何检测VS运行时库安装成功?
MsiQueryProductStateA函数实现安装产品查询。如有疑问,敬请留言。原创 2023-03-07 10:42:00 · 720 阅读 · 0 评论 -
Qt-QProcess-启动子进程-控制台进程隐藏-获取子进程标准输出和返回码
当有新的标准输出数据可⽤时,它也会发出readyReadStandardOutput()信号,⽽当有新的标准错误数据可⽤时,它会发出readyReadStandardError()信号。⽆需调⽤read()函数,readLine()函数或getChar()函数,⽽是可以通过调⽤readAllStandardOutput()函数或readAllStandardError()函数显式地从两个通道之⼀读取所有数据。这样生成的程序,窗口需要程序编码创建,不创建则没有窗口,从而达到无显示的隐藏效果。原创 2023-02-21 11:03:22 · 3179 阅读 · 2 评论 -
Sandboxie-沙箱软件-编译说明-模块解析
LowLevel.dll作为资源嵌入到SbieSvc.exe中(参见core\svc\lowlevel.rc)。目录SandboxWUAU(\apps\com\WUAU)。目录SandboxRpcSs(\apps\com\RpcSs)。目录Common(\apps\common)。目录SbieIni(\apps\ini)。目录SboxDcomLaunch(\apps\com\DcomLaunch)。目录SboxDll(\core\dll)。创建Sbie注入DLL。目录Start(\apps\start)。原创 2023-02-17 09:54:34 · 1220 阅读 · 0 评论 -
Qt-源码部分编译-C++
opensource 使用 opensource 版本的Qt(相对于 -commercial 选项)-debug 只编译出 debug 版本,是默认选项(相对于 -release 选项)-shared 使用共享库,是默认选项(相对于 -static 选项)-no-qml-debug 不编译 qml debug 的支持。-debug-and-release 两种版本都编译。-no-openssl 不编译 openssl。-iconv 开启 iconv 的支持。-no-iconv 不编译 iconv。原创 2023-02-03 08:04:56 · 439 阅读 · 0 评论 -
Qt-QObject-对象树模型-查找子控件-类方法信息-QDebug信息重定位-调用槽函数
QObject 以对象树的形式组织起来。当为一个对象创建子对象时,子对象会自动地添加到父对象的children()列表中。父对象拥有子对象的所有权,比如父对象可以在自己的析构函数中删除它的孩子对象。使用findChild()或findChildren()通过名字和类型查询孩子对象。在元数据中含有此对象的函数方法信息。含方法在源代码中的名称,及按序号调用的函数内存地址。可以将QDebug函数信息输出到指定控制台,文件或者其它载体上。QObject的元数据中含有此对象的类层次信息。如有疑问,敬请留言。原创 2023-02-01 08:31:54 · 654 阅读 · 0 评论 -
Qt-C++-信号槽-调用形式-逆向分析-槽函数定位
从上面的源码可知,如果需要真正的逆向定位槽函数,关键在于找到qt_static_metacall函数,找到qt_meta_stringdata_QtConnect所在位置可知槽函数的源码名称。qt_static_metacall函数是当前类对象槽函数的上级函数,可以根据此特征,在一些有提示的按钮上,快速找到此函数。信号槽是一种观察者模式的实现。是Qt的核心骨架之一。按序号索引上级函数。如有疑问,敬请留言。原创 2023-01-31 09:26:27 · 744 阅读 · 0 评论 -
Qt-C++-QMetaObject-元数据类-存储Qt类的基本信息-槽函数逆向定位
从上面的源码可知,如果需要真正的逆向定位槽函数,关键在于找到qt_static_metacall函数,找到qt_meta_stringdata_QtConnect所在位置可知槽函数的源码名称。qt_static_metacall函数是当前类对象槽函数的上级函数,可以根据此特征,在一些有提示的按钮上,快速找到此函数。在qt_meta_stringdata_QtConnect 这个变量中,保存了槽函数调用名称,在qt_meta_data_QtConnect中有调用函数的序号索引。如有疑问,敬请留言。原创 2023-01-31 09:22:23 · 743 阅读 · 2 评论 -
C++-lambda表示式-简短函数对象的效率写法-函数对象(仿函数)
④ c++14中增加广义捕获(Generalized capture):即在捕获子句中增加并初始化新的变量,该变量不需要在lambda表达式所处的闭包域中存在;捕获的外部变量列表,通过逗号分隔,可进行传值捕获或者引用捕获,lambda表达式与这些捕获的外部变量会构成一个闭包(Closure),外部变量为闭包的成员变量。lambda表达式的闭包含有局部变量的引用(悬挂引用 Dangling references),在超出创建它的作用域之外的地方被使用的话,将引发内存越界访问。如有疑问,敬请留言。原创 2023-01-30 17:16:18 · 404 阅读 · 0 评论 -
C++-win32-进程打开控制台-输出临时数据
头文件用于包含一个全局唯一对象,输出信息到控制台。实现文件,主要实现显示控制台功能。原创 2023-01-29 17:08:21 · 503 阅读 · 0 评论 -
C++-操作符重载-赋值-函数调用-算符运算符-输入输出
不能引入新的操作符。例如,不能定义operator**()函数来表示求幂。reinterpret_cast——强制类型转换操作符。dynamic_cast——强制类型转换操作符。static_cast——强制类型转换操作符。const_cast——强制类型转换操作符。sizeof ——sizeof操作符。重载运算符不要改变运算符公认的意义。typeid——一个RTTI操作符。-> 通过指针访问类成员的操作符。::——作用域解析操作符。.*——成员指针操作符。() 函数调用操作符。如有疑问,敬请留言。原创 2023-01-29 11:26:32 · 467 阅读 · 0 评论 -
最新版Visual Studio下载-离线安装包制作-UltraISO压缩-VS安装
将文件复制到最少剩余空间50G以上的硬盘下,新建一个文件夹,如Vs2022。使用UltraISO将下载的离线文件压缩成ISO文件,就可以在虚拟光驱中使用。以上命令会下载所有的Vs2022组件。也可以指定只下载部分。原创 2023-01-18 18:45:46 · 1199 阅读 · 0 评论 -
Qt-C++-QObject-基本原理-哪些基本功能?
它比qobject_cast(obj)或obj->inherits(“QWidget”)快得多。8、对于实现信号、插槽或属性的任何对象,Q_OBJECT宏都是必需的。强烈建议在QObject的所有子类中使用此宏,不管它们是否实际使用信号、插槽和属性,否则可能会导致某些函数表现出奇怪的行为。6、QObjects可以通过event()接收事件并过滤其他对象的事件。5、当一个对象被删除时,它会发出一个destroyed()信号。1、QObject类是所有Qt对象的基类。原创 2023-01-18 09:07:21 · 258 阅读 · 0 评论 -
c++-类成员函数-常用运算-取成员函数地址-动态调用-申明
当C++类对象中的成员函数转成汇编代码时,成员函数的特点与普通函数并没有特别区别,只是采用的调用方式有些不同而已。普通函数可以直接用函数名当作函数地址。类的成员函数是对象使用非常重要的方式,在C++的一些高级技巧里,非常有必要了解清楚。本文主要介绍类成员函数地址,类成员函数申明,类成员指针与函数的动态绑定。也可以在逆向插入代码时,用获取的对象指针来调用其特定的成员函数指针。对象动态调用符号.*,对象指针动态调用符号->*。//.*的用法,经由对象调用。//->*的用法,经由对象指针调用。原创 2023-01-17 16:26:17 · 1268 阅读 · 0 评论 -
vector-常用操作-排序-查找-删除-插入-C++
通过find函数可以找到容器中目标元素的索引,然后通过与第一个元素的偏移,即可以计算元素的索引位置。同时通过迭代器,也可以非常方便的修改vector中元素的值。在algorithm模块里,存在sort排序函数,默认升序排序,也可以通过自定义函数来控制升序降序。注意定义函数的元素为vector包含的类型。删除尾部元素,删除指定索引元素,删除指定索引范围元素,删除后返回删除后一个元素的索引。可以直接用push_back函数在尾部插入值。vector的删除算法相对来说,需要多一些规则。如有疑问,敬请留言。原创 2023-01-09 12:33:19 · 307 阅读 · 0 评论