C++开发大全
C++开发大全
1号程序媛
全方位实战项目修炼功法,助力每一个IT人自学成才,走上自己的修炼大道,早日成仙。
展开
-
CMake编译链接json-c库
这里include和lib目录是我自己创建的。cmake-gui没有install这个操作,cmake-gui生成项目后使用VSStudio打开并编译,也没有安装到我预设的目录,所以只好自己创建了。使用cmake-gui,vs2022编译完json-c库之后,得到了json-c.lib,json-c.dll等库文件。注意使用的时候需要把编译后的json.h文件加入到include目录。原创 2024-10-18 12:18:30 · 297 阅读 · 0 评论 -
msys2下使用mingw64还是ucrt64好?
但是有一次看同事使用了ucrt64,就查了一下到底ucrt64是个什么鬼?这一查才知道,原来ucrt64才是windows下的正统编译环境,在这个编译环境下编译,能够保证编译程序在windows下是性能最好的。当我试图编译某个源码包的时候,./configure一下,make一下,问题出现,原来ucrt对于本地路径有认知障碍,编译过程中它不识别什么D盘C盘之类的路径,这真是稀奇了。于是乎,我就果断换成了ucrt64,心理上觉着好像是编译的时候快了的感觉。没办法,果断换回了mingw64,编译畅通无阻。原创 2024-09-20 08:25:20 · 653 阅读 · 0 评论 -
CodeBlocks20.03配置wxWidgets3.2.5教程
CodeBlocks仅仅是为了让你入门wxWidgets,或者其他纯C++的项目,譬如OpenGL,OpenCV,sdl之类的,因为它有模板,方便。用CodeBlocks开发wxWidgets,最主要的有点就是你可以快速上手项目流程,而不是一开始就去抠那些控件,布局,样式,还有各种自定义控件,事件之类的细节,因为拖控件的好处就是让你直观地开始你的业务逻辑编程,而不是语法编程。最主要的配置就库的搜索路径,和头文件的包含路径,以及运行时的dll文件路径的配置,下面图示都配置一遍即可。原创 2024-09-12 08:44:28 · 571 阅读 · 0 评论 -
最管用的能屏蔽WIndows10/11系统功能按键的工具--powerToys键盘管理器
第一种方式:注册表肯定是98%的按键都能够屏蔽的。好了,第三种,就是我主要想说的,powerToys,里面的键盘管理器。最近在开发中碰到需要屏蔽系统按键功能的需求,原本以为是程序里屏蔽按键,结果,原来是需要屏蔽操作系统默认按键功能。使用键盘管理器,设置按键映射,将你想哟屏蔽的按键映射为别的没用的按键,就可以达到屏蔽该系统功能的程度了。这样的话,就只能往注册表,脚本,全局钩子函数,以及一些第三方的什么工具之类的方面想想了了。这里要提一下的是:我们写的回调函数是可以放在类里面的,只需要将它作为静态函数即可。原创 2024-08-31 17:13:52 · 477 阅读 · 0 评论 -
开源跨平台支持400多个国家语言屏幕键盘虚拟键盘Keyman开发指南
很多公司都是只开发英汉两种键盘布局,连Qt自带的VirtualKeyboard实际上要支持多国语言,也需要自己修改很多东西。这里终于找到一个非常好用的开源国际键盘Keyman。很多嵌入式开发平台或者移动端,桌面端开发都需要用到自定义的键盘,想要开发一个能够支持多国语言键盘布局的开源Keyboard可不容易,工作量非常大。大家可以自行去下载。原创 2024-08-28 09:34:45 · 532 阅读 · 0 评论 -
C++开发IDE用VisualStudio好还是QtCreator好?
但是但你需要windows SDK的支持的时候,具体来说,就是操作窗口,操作注册表,操作Windows进程,系统输入法,directX之类的api时,就需要考虑还是用回VisualStudio吧。当然了,VisualStudio和QtCreator本身就不是一个量级,VS越做越大,庞大的插件库也使得他能够支持从嵌入式到手机端,从web到脚本,甚至游戏,仿真等等各个领域的开发任务。还有类视图,项目布局,代码导航跳转,格式重排,等等各项功能,在QtCreator中用的都很舒服,但是VS中却用的很不爽。原创 2024-08-27 09:32:25 · 466 阅读 · 0 评论 -
C++ wxWidgets图形界面开发用什么IDE最好?
不过值得庆幸的是,唯独是它,具备支持wxWidgets界面开发的设计器,正如QtCreator支持Qt界面设计器,vsualstudio支持wpf的界面设计器一样,他们似乎就是配套使用的。所以如果你对wxWidgets比较熟悉,而且不大喜欢拖拽界面控件去开发项目,那么使用QtCreator去开发wxWidgets是很合适的。wxWidgets是目前C++项目界面开发中仅次于Qt的唯二最具备完整项目构件需求的开发框架,虽然它没有Qt好用,但胜在完全免费,Qt商业应用是要买授权的。原创 2024-08-19 23:48:06 · 811 阅读 · 0 评论 -
CMake如何指定动态库路径,并链接到目标文件
CMake如何指定动态库路径,并链接到目标文件。原创 2024-08-08 08:39:23 · 1592 阅读 · 0 评论 -
解决Qt6 error: The kit needs to define a CMake tool to parse this project.
具体原因可能和cmake的版本,以及是否设置为默认有关。另外也和QtCreator中自带的cmake工具有关系。所以,如果你出现了这个问题,就试试这几个路子吧。在编辑菜单里面将错误的那个删掉,设置另一个为默认即可。上述错误,就是我在Windows10下运行cmake项目总是报错的一个问题。cmake对于Qt6来说很重要,所以学会cmake是必须的。明明路径已经配好了,却总是报错。原创 2024-07-29 15:10:38 · 644 阅读 · 0 评论 -
C++中传递指针和传递引用应用场合的区别
传递空值:需要传递空值或者表示没有对象的情况时,使用指针更为合适,因为指针可以为空(null)。- 对象可选性:如果函数需要接受可选的对象或者需要在函数内部改变指向的对象,使用指针是更合适的选择。- 性能优化:引用通常比指针更为高效,因为不涉及指针的间接性,避免了指针操作带来的开销。- 改变原始对象:无论是指针还是引用,都能够实现对原始对象的直接修改,而不是修改其副本。- 避免拷贝开销:无论是指针还是引用,都可以用于避免因为传递大型对象而带来的拷贝开销。原创 2024-07-18 08:34:11 · 84 阅读 · 0 评论 -
C++类的内存分配问题理解
但类的静态数据成员属于类本身,而不是类的具体实例,因此它们在类加载到内存时就会被分配内存空间。在C++中,当程序加载时,类的定义会被加载到内存中,这意味着编译器会知道类的结构和成员函数的定义,但并不会为该类的任何对象分配内存空间。简而言之,类的加载到内存只是为了让编译器了解类的定义,而类的实例化对象时才会真正分配内存空间来存储对象的数据和函数。类的定义只是描述了类的结构和成员函数,实际的内存分配发生在创建类的对象时。当你创建类的对象时,才会分配内存来存储该对象的数据成员和虚函数表等信息。原创 2024-04-07 09:18:25 · 472 阅读 · 0 评论 -
c++中函数传递const引用有什么作用
1. 避免拷贝造成的性能损耗:当传递一个大型对象作为参数时,如果不使用引用而是直接传递对象,会触发对象的拷贝构造函数,导致额外的性能开销。函数`printValue`接受一个const int引用作为参数,确保不会修改传入的值。2. 防止意外修改:通过将参数声明为const引用,可以确保函数内部不会意外修改传入的参数。3. 允许传递临时对象:const引用可以接受临时对象作为参数,因为临时对象无法被修改,所以使用const引用可以更灵活地处理临时对象的传递。// value 不能在这里被修改。原创 2024-03-26 09:21:22 · 270 阅读 · 0 评论 -
C++中什么时候应该使用结构体,什么时候应该使用类
结构体也可以显式地使用访问控制关键词,如果你声明的变量或方法没有写在任何访问控制关键词下,那么默认为public。private的意思是,该成员变量只能在该类的内部定义中使用,如果你的类对象在别的类的代码中,就无法直接调用了。- 结构体的成员变量默认为公共可见的,可以直接通过结构体实例对象来访问和修改。- 类的成员变量默认为私有可见的,只能通过类的成员函数来访问和修改。- 结构体通常用于组织和存储相关的数据,不包含复杂的行为和方法。- 类可以包含成员函数,用于定义类的行为和操作。原创 2024-01-11 01:10:07 · 764 阅读 · 0 评论 -
C++处方管理系统架构——设计模式应用场景分析
在C++处方管理系统中,可以使用设计模式来解决各种常见的问题,包括药品对象的创建、处方审核行为管理等。- 用于实现对象之间的发布-订阅机制,例如用于通知处方审核模块有新的处方需要审核。其他设计模式,如策略模式、装饰器模式、命令模式等,供大家自行添加学习。- 用于对象的创建,例如创建不同类型的药品对象或处方对象。// 显示对扑热息痛的信息 }// 通知观察者 }// 获取药品库存数量。// 显示阿莫西林的。// 单例模式示例代码。// 观察者模式示例。原创 2024-01-09 12:33:27 · 585 阅读 · 0 评论 -
C++供应链管理模块的图数据结构描述
M在某些供应链管理模块,我们使用邻接表来表示图,其中每个顶点表示一个节点(例如仓库、生产厂家、分销商等),每条边表示节点之间的关系(例如运输路径、供应关系等)。// 例如,表示运输距离 Edge edge2 = {150};定义`Vertex`和`Edge`结构来表示顶点和边,然后使用`Graph`类来构建图。// 边的权重,表示运输距离、供应关系。// 可以添加其他属性,如运输方式、运输成本等};// 可以添加其他属性,如库存量、生产能力等};// 边表示节点之间的关。// 使用邻接表表示。原创 2024-01-09 10:52:59 · 451 阅读 · 0 评论 -
C++客户关系管理系统架构——设计模式应用场景代码分析
客户关系管理系统的客户服务与支持模块可以使用多种设计模式,包括但不限于工厂模式、观察者模式、策略模式和模板方法模式等。// 处理新的客户服务请求 }// 具体处理产品问题的逻辑。// 具体处理退款请求的逻辑。// 默认处理逻辑 }// 优先处理逻辑 }// 具体的处理步骤。// 客户服务人员类(观察者)// 客户服务请求处理策略接口。// 具体的客户服务请求处理策。// 客户服务请求处理模板。// 抽象客户服务请求类。// 具体客户服务请求类。// 客户服务请求工厂。原创 2024-01-02 09:55:24 · 643 阅读 · 1 评论 -
各类图形库创建图层的方式示例
GDAL(Geospatial Data Abstraction Library)和OGR(Simple Features Library)是用于读写地理空间数据的库。你可以使用它们来创建图层并写入地理空间数据。不同的图形库和地理信息系统(GIS)软件提供了不同的方式来创建图层。Fiona是Python中用于读写地理空间数据的库,它可以与GDAL/OGR一起使用来创建图层并写入地理空间数据。在QGIS软件中,你可以通过界面操作或者使用Python脚本来创建图层。// 创建要素并写入图。原创 2023-12-25 09:56:18 · 97 阅读 · 0 评论 -
如何使用C语言中的signal 信号函数
然后在`main`函数中使用`signal`函数来注册`signalHandler`函数,以处理`SIGINT`信号。当程序运行时,它会发送`SIGINT`信号,然后`signalHandler`函数将被调用来处理这个信号。在C语言中,`signal`函数用于注册信号处理程序,即在接收到特定信号时执行指定的处理函数。// 发送SIGINT信号 return 0;示例中,我们首先定义了一个名为`signalHandler`的信号处理函数。// 执行信号处理的逻。原创 2023-12-20 12:30:10 · 274 阅读 · 0 评论 -
C++父类和子类的指针静态转换和动态转换有什么区别
动态转换是在运行时进行的转换,会进行类型检查以确保转换的安全性。如果转换是安全的,动态转换将返回转换后的指针;这意味着静态转换不会检查转换的类型是否是安全的,因此需要程序员来保证转换的安全性。2. 静态转换不会检查转换的类型是否安全,需要程序员保证转换的安全性;3. 静态转换可以用于任何类型的转换,包括非多态类之间的转换;在C++中,父类和子类的指针静态转换和动态转换有一些重要的区别,主要涉及到转换的安全性和行为。它可以将父类指针转换为子类指针,或者将子类指针转换为父类指针,而不进行类型检查。原创 2023-12-20 12:27:23 · 162 阅读 · 0 评论 -
C++/Qt如何处理程序崩溃
在这个示例中,我们使用 `std::signal()` 函数来注册信号处理函数。当程序崩溃时,信号处理函数 `signalHandler()` 将被调用,并给用户一个提示,然后退出程序。// 捕获异常终止信号 // 在这里写你的程序代码 // ...在 C++ 中,程序崩溃时可以通过信号处理机制来捕获崩溃信号,并在程序崩溃时给用户一个提示。错误码:" << signal << std::endl;在信号处理函数中,我们可以添加一些额外的代码,比如记录日志等,以便更好地排查程序崩溃的原因。原创 2023-12-20 09:36:25 · 583 阅读 · 0 评论 -
Git上有很多二进制文件更新了,无法合并,git stash pop 的时候提示冲突,如何解决
在冲突的文件中,Git 会在冲突部分的上方和下方标记出冲突的内容,你需要手动编辑这些文件,保留需要的部分,删除不需要的部分,并解决冲突。当在使用 `git stash pop` 命令时遇到冲突,可能是因为之前暂存的修改与当前工作目录中的修改产生了冲突。这一步可能会产生冲突。1. 首先,使用 `git stash list` 命令查看你之前暂存的修改,找到对应的暂存项的索引(stash@{n})。在解决完所有的冲突后,使用 `git add` 命令将修改后的文件标记为已解决冲突的状态。原创 2023-12-19 14:36:12 · 1139 阅读 · 0 评论 -
C++中定义抽象类指针的作用
我们还定义了一个指向 Animal 类的指针 animalPtr,它可以指向任何派生类对象。在 main() 函数中,我们将 animalPtr 指向 Cat 对象和 Dog 对象,并调用它们的 makeSound() 函数。在 C++ 中,抽象类可以定义类指针。类指针是指向类对象的指针,它可以指向任何派生类对象,包括抽象类的派生类对象。因此,抽象类可以定义类指针,并且这些指针可以指向任何派生类对象,无论这些派生类是否是抽象类。// 输出 "Meow!// 输出 "Woof!原创 2023-12-19 00:24:49 · 276 阅读 · 0 评论 -
C++带参数的单例模式
在上面的示例中,Singleton 类包含一个私有的静态成员变量 instance,用于保存单例对象的实例。getInstance() 方法接受一个参数 config,并根据参数来创建不同的单例对象。3. 添加一个静态方法,用于获取单例对象的实例。在该方法中,可以根据参数的不同来创建不同的单例对象。1. 创建一个类,该类负责管理单例对象的创建和访问,并提供一个静态方法来获取单例对象。2. 在该类中添加一个私有的静态成员变量,用于保存单例对象的实例。4. 将构造函数设为私有,以防止外部代码直接实例化该类。原创 2023-12-18 12:07:33 · 619 阅读 · 1 评论 -
c++项目代码中装饰设计模式的应用区分
1. **类和对象的命名**:装饰设计模式通常涉及到装饰器(Decorator)和被装饰对象(Component)。3. **代码行为**:装饰设计模式的目的是动态地将责任附加到对象上,同时保持接口不变。2. **类的关系**:装饰设计模式的核心是动态地将责任附加到对象上。因此,可以查看类之间的关系,是否存在类的继承关系,以及是否存在将装饰器对象嵌套在被装饰对象中的迹象。因此,可以查看代码中是否存在这样的场景,比如需要动态地为对象添加新的行为时使用了装饰类。原创 2023-12-10 11:25:08 · 44 阅读 · 0 评论 -
肉眼可见,c++项目代码中是否使用了组合设计模式,如何看出其中的组合类?
3. **代码行为**:组合设计模式的目的是让客户端能够以统一的方式处理单个对象和对象组合。因此,可以查看代码中是否存在对对象组合的统一处理方式,以及是否存在将对单个对象的操作转发给对象组合的行为。2. **类的关系**:组合设计模式的核心是将对象组合成树形结构以表示“部分-整体”的层次结构。因此,可以查看类之间的关系,是否存在类的包含关系,以及是否存在将对象组合成树形结构的迹象。因此,可以查看代码中是否存在这样的场景,比如需要以统一的方式处理单个对象和对象组合时使用了组合类。原创 2023-12-09 23:29:23 · 40 阅读 · 0 评论 -
c++项目代码中如何区分使用了桥接设计模式,如何看出代码中的桥接类?
1. **类和接口的命名**:桥接设计模式通常涉及到抽象部分(Abstraction)和实现部分(Implementor)。3. **代码行为**:桥接设计模式的目的是将抽象和实现解耦,使它们可以独立变化。因此,可以查看代码中是否存在将抽象部分和实现部分分离的行为,以及是否存在将抽象部分的方法调用转发给实现部分的行为。因此,可以查看类之间的关系,是否存在类继承或组合关系,以及是否存在将抽象部分和实现部分分离的迹象。2. **类的关系**:桥接设计模式的核心是将抽象部分和实现部分分离,使它们可以独立变化。原创 2023-12-09 23:25:39 · 45 阅读 · 0 评论 -
如何区分c++项目代码中是否使用了适配器设计模式,如何区分代码中的适配器类?
1. **类和接口的命名**:适配器设计模式通常涉及到适配器类(Adapter)和被适配的类(Adaptee),以及目标接口(Target)。因此,可以查看类之间的关系,是否存在类继承或组合关系,以及是否存在对被适配类的引用。总之,要区分代码中是否使用了适配器设计模式,以及如何区分适配器类,需要结合类的命名、类之间的关系、代码行为以及使用场景来看的!因此,可以查看代码中是否存在将不兼容的接口转换为兼容的接口的行为,以及是否存在将目标接口的方法调用转发给被适配的对象的行为。原创 2023-12-09 23:23:21 · 38 阅读 · 0 评论 -
C++ Qt生成二维码
在这个示例中,`generateQRCode`函数接受要编码的数据和生成的二维码文件名作为参数。它使用`QZXing`库的`encode`函数生成二维码,并将生成的二维码保存为图片文件。在C++ Qt中生成二维码可以使用第三方库,比如`QZXing`。`QZXing`是一个基于C++的开源二维码处理库,可以用于在Qt应用程序中生成和解码二维码。2. 在Qt项目中包含`QZXing`库的头文件,并链接`QZXing`库。1. 首先,下载`QZXing`库的源代码并将其添加到你的Qt项目中。原创 2023-11-22 15:58:25 · 279 阅读 · 0 评论 -
C++ qt类中函数后面加const是什么意思?
函数声明 `int spanAngle() const;` 表示这个函数是一个成员函数(方法),返回类型为整型(int),没有参数(const),并且是一个常量函数(const)。- `const`:表示这个函数是一个常量函数,即在函数内部不会修改对象的成员变量。原创 2023-11-22 00:12:42 · 464 阅读 · 0 评论 -
如何自己实现c++的智能指针?
实际上,C++11 标准已经提供了 `std::shared_ptr` 和 `std::unique_ptr` 等智能指针类,建议使用标准库提供的智能指针类,以避免自己实现智能指针时可能出现的问题。// 输出 5std::cout << *sp2 << std::endl;这个简单的示例实现了一个基本的智能指针类,通过引用计数来管理资源的释放。原创 2023-11-06 09:17:50 · 77 阅读 · 1 评论 -
提示ISO C++11 does not allow conversion from string literal to ‘char *‘怎么办
还可以使用`const_cast`来将字符串字面值的类型转换为`char*`类型的指针。这样做的前提是你确保不会修改这个字符串字面值。这个错误是因为ISO C++11标准不允许将字符串字面值直接转换为`char*`类型的指针。C++中解决这个问题的一个方法是将字符串字面值声明为`const char*`类型的指针。这样修改后,你就不会再遇到这个编译错误了。原创 2023-11-06 00:46:52 · 2525 阅读 · 1 评论 -
cmake如何设置curl库路径
要在CMake中设置CURL库的路径,你可以使用`CURL_LIBRARY`变量来指定CURL库的路径。# 将CURL库链接到你的项目中。# 添加CURL库的头文件路径。# 查找CURL库和头文件。# 设置CURL库的路径。原创 2023-11-01 22:04:45 · 1330 阅读 · 1 评论 -
空间分析通常用到哪些开源库
4. PySAL:PySAL(Python Spatial Analysis Library)是一个用于空间分析的Python库,它提供了一些常用的空间分析方法和工具,如空间自相关分析、空间回归、空间聚类等。2. Shapely:Shapely是一个用于处理几何对象的Python库,它提供了一些方便的函数和类,用于进行空间分析。5. Rasterio:Rasterio是一个用于处理栅格数据的Python库,它提供了一些方便的函数和类,用于读取、处理和分析栅格数据。原创 2023-10-31 09:32:48 · 221 阅读 · 1 评论 -
QPointer智能指针使用方式及场合总结
3. 在信号槽连接中使用:当在信号槽连接中涉及到QObject对象时,如果连接的接收者对象可能会在连接后被销毁,可以使用QPointer来管理接收者对象的指针。4. 在多线程环境中使用:在多线程环境中,由于对象的生命周期可能会受到线程调度的影响,使用QPointer可以避免在一个线程中访问另一个线程中已销毁的对象。总之,QPointer是一个非常有用的工具,适用于需要管理QObject派生类对象指针的情况,特别是在涉及到对象销毁和多线程的场景中。原创 2023-10-26 13:58:53 · 678 阅读 · 0 评论 -
C++中stl库iterator 如何自定义
这里我们定义了一个名为`my_iterator`的迭代器类型,它继承自`std::iterator`,并指定了迭代器的类型标签为`std::forward_iterator_tag`,元素类型为`T`。在这个例子中,我们使用`std::vector`容器存储了一些整数,然后使用`vec.begin()`和`vec.end()`获取了迭代器的起始和结束位置,然后使用`for`循环遍历了容器中的所有元素,并输出它们的值。// 构造函数 my_iterator(T* ptr) : ptr_(ptr) {}原创 2023-10-24 09:40:25 · 146 阅读 · 0 评论