C/C++
IT1995
每周个人笔记分享,欢迎广大网友查阅!
展开
-
C++笔记-sstream的使用(字符串转其他类型,读取文件时用得多)
在 C++ 中,std::stringstream 类可以用来进行字符串流的输入输出,将字符串和其他类型的数据进行转换。原创 2024-08-12 08:39:17 · 376 阅读 · 0 评论 -
Linux笔记-对.a静态库的进一步理解(2024-04-09)
问:遇到问题应该及早发现才算是好的方法吧,.a静态库需要其他程序链接他时才会发现问题,那.a库的优势在哪呢?答:是的,一般来说,及早发现问题是好的编程实践。静态库(.a文件)和动态库(.so文件)各有其优势,针对不同的应用场景选择合适的库有助于提高开发效率和程序可维护性:静态库(.a):优势:独立性: 静态库可以将所有依赖项(包括第三方库)打包在一起,使得程序在不同环境中运行更为可靠。可移植性: 可以将静态库嵌入到可执行文件中,方便在没有动态库的环境中运行。原创 2024-07-22 08:41:34 · 1024 阅读 · 0 评论 -
C++笔记-makefile添加第三方.h和.cpp及添加.h和lib库模板
【代码】C++笔记-makefile添加第三方.h和.cpp及添加.h和lib库模板。原创 2024-05-06 10:51:23 · 554 阅读 · 0 评论 -
Qt笔记-解决VS中.h文件新增Q_OBJECT或继承QObject后编译报错问题
原因是.h中某类添加Q_OBJECT宏以继承QObject后就需要使用Qt的moc工具生成对应的moc_xxx.cpp文件。将此文件放到vs工程的generated files目录中,如果报#include找不到,修改下对应的路径即可。所以VS报错,就是缺少这个。随后就能编译通过了。原创 2024-04-29 09:43:35 · 778 阅读 · 0 评论 -
Qt笔记-解决子控制大小获取不正确(width和height)需要重制窗体后,才能获得正确的值
由于延迟为0,这意味着回调函数将在事件循环的下一次迭代中被执行,此时子控件的尺寸应该已经被正确计算和应用。在上面的示例中,我们将延迟参数设置为0,这样可以确保在子控件的布局和约束已经应用后,通过QTimer触发的回调函数才会执行获取子控件尺寸的操作,从而获得正确的宽度和高度值。在Qt中,子控件的宽度和高度在构造后并不准确,而只有在调整窗口大小后才正确,这可能是因为子控件的布局或者约束尚未完全计算和应用。通过将获取子控件尺寸的代码延迟到事件循环的下一次迭代中,可以确保在布局和约束已经应用后获取到正确的尺寸。原创 2024-04-22 08:34:35 · 690 阅读 · 0 评论 -
Qt笔记-解决Qt程序连不上数据库MySQL数据库(重编libqsqlmysql.so)
Qt的QSqlDatabase使用的是libqsqlmysql.so,而libqsqlmysql.so其实是对libmysqlclient.so的封装。差不多就可以知道了,无mysql客户端驱动,在机器上装下mysql-client。如果发现是libmysqlclient.so => not found。将里面的pro文件修改添加和LIBS和INCLUDEPATH。造成这样的问题大多数是libqsqlmysql.so有问题。再重编下libqsqlmysql.so,即可。再次运行程序就可以了。原创 2024-04-01 08:11:14 · 560 阅读 · 1 评论 -
C/C++笔记-make编译时需要注意的问题(编译可执行程序时链接的so出现未定义的引用)
一般开源的so兼容性相当好,基本上不会出现上面的问题,自定义的so很有可能会出现。所以解决办法,还得去看makefile文件,和报错的地方,多少个参数,并且是在哪个地方定义的.原创 2024-03-25 08:44:25 · 503 阅读 · 0 评论 -
C/C++笔记-使用mysql-connector-c连接mysql数据库
libmysql.lib 是 Windows 平台上使用的库文件,它是使用 Visual Studio 编译器编译的。mysqlclient.lib 是 Linux 平台上使用的库文件,它是使用 GCC 编译器编译的。libmysql.lib 和 mysqlclient.lib 都是 MySQL C Connector 的库文件,但它们针对不同的操作系统和编译器。解压后lib有2个,一个是libmysql.lib一个是mysqlclient.lib。原创 2024-01-29 10:56:27 · 1254 阅读 · 1 评论 -
Qt文档阅读笔记-Fetch More Example解析
Fetch More Example这个例子说明了如何在视图模型上添加记录。这个例子由一个对话框组成,在Directory的输入框中,可输入路径信息。应用程序会载入路径信息的文件信息等。不需要按回车键就能搜索。当有大量数据时,需要对视图模型进行批量增加。此案例,实现了FileListModel类,此类包含了一个视图模型,这个视图模型获取路径下的文件。下面来看下FileListModel的代码。原创 2023-11-13 08:49:51 · 1688 阅读 · 0 评论 -
C++笔记-RTTR编译&安装&简单使用
需不需要make install就看你们自己了,我没有install,后面的测试程序直接拷贝编译好的so进行处理。这里我使用了Qt的pro管理项目,qmake写起来比makefile简单点。这里以Linux为例,我使用的机器的gcc版本是4.9.2。首先在官网将rttr的0.9.5版本下载下来。使用的RTTR的版本是0.9.5。原创 2023-10-30 08:45:15 · 2911 阅读 · 0 评论 -
Qt笔记-自定义QSet,QHash的Key
②qHash(const QString &, uint):生成hash的,同样要传入唯一标识的,上面的例子是用name生成的hash再和出生时间异或。①operator==:这里要注意,判断2个自定义对象是否相等,如果有唯一标识字段,比如主键,就可以直接用那个,如果没有,就在结构体中想想,拿些字段组合可以唯一标识这个结构体;构造2个内联函数,方便QHash去对比一个是operator == ,一个是qHash(const QString &, uint);在此我直接总结下,方便查阅。原创 2023-06-26 08:44:08 · 3289 阅读 · 0 评论 -
Qt笔记-pro文件新增宏、if、else、编译后的shell命令(写so或dll时提高开发效率)
背景是这样的,目标是要写个dll,so,这种动态链接库,但如果直接写这玩意的话,调试起来很麻烦,需要用其他程序去加载他,特别是在linux上,没界面的那种,开发效率简直慢了不知道多少。从中LIBXXX_LIBRARY是在pro文件中定义的,当有时就加载libXXX_global.h,没有就说明是exe,就。②代码中通过pro中定义的宏,对Q_DECL_EXPORT和Q_DECL_IMPORT进行设置,设置到要导出的类上。最后来看下关键的类,也就是导出的类,提供给三方用的。③#:pro文件中“#”代表注释;原创 2023-05-31 18:02:50 · 4237 阅读 · 0 评论 -
C/C++笔记-使用Qt的UI文件时make流程
Wl, -rpath:①用于编译时指定间接引用的库位置,作用同-Wl,-rpath-link;从中发现了个有意思的,以前都以为moc_xxx.cpp文件是通过对于的.h和.cpp使用moc联合生成的,现在发现他仅仅是使用对应的.h文件生成。这里就很明确的发现了,在编译阶段,使用了Q_OBJECT和继承了QObject的类会编译时会生成2个object文件,分别是原始object和带moc的object文件。-O2:optimization优化,比-O高一级的优化,编译优化,具体优化哪些内容,在此不说明;原创 2023-05-15 11:04:35 · 2421 阅读 · 0 评论 -
C/C++笔记-构造makefile使用MOC程序及编译,链接
②:$(PROGRAM): $(OBJECTS):这个会先找在文件中找main.o Test.o moc_Test.o,如果找不到就在makefile下,看有没有对应的标签。背景是这样的构造一个Test类,使用了Q_OBJECT宏,和继承了QObject,也就是元对象,这时,makefile需要如何写。每一条命令在前一篇文章中已经说明了。原创 2023-05-08 21:17:02 · 2052 阅读 · 0 评论 -
C/C++笔记-分析带有Q_OBJECT继承QObject的类make流程
Wl, -rpath:①用于编译时指定间接引用的库位置,作用同-Wl,-rpath-link;从中发现了个有意思的,以前都以为moc_xxx.cpp文件是通过对于的.h和.cpp使用moc联合生成的,现在发现他仅仅是使用对应的.h文件生成。这里就很明确的发现了,在编译阶段,使用了Q_OBJECT和继承了QObject的类会编译时会生成2个object文件,分别是原始object和带moc的object文件。-O2:optimization优化,比-O高一级的优化,编译优化,具体优化哪些内容,在此不说明;原创 2023-05-03 14:49:49 · 3803 阅读 · 1 评论 -
C/C++笔记-写一个Makefile并链接QtCore库使用QString,QDebug
Wl, -rpath:①用于编译时指定间接引用的库位置,作用同-Wl,-rpath-link;②用于运行时指定所有引用库的位置,作用同修改环境变量(LD_LIBRARY_PATH),并且库路径引用优先级高于LD_LIBRARY_PATH;③$原创 2023-04-23 14:52:20 · 2397 阅读 · 2 评论 -
C/C++笔记-记录一次对qmake生成的Makefile的分析(2023-02-07)
Wl, -rpath:①用于编译时指定间接引用的库位置,作用同-Wl,-rpath-link;②用于运行时指定所有引用库的位置,作用同修改环境变量(LD_LIBRARY_PATH),并且库路径引用优先级高于LD_LIBRARY_PATH;-fPIC:用于生成位置无关的代码(Position-Independent-Code);-DQT_CORE_LIB:这个没查到,但看名称差不多能猜到是QT核心库的调试;-D_REENTRANT:它会对部分函数重新定义它们的可安全重入的版本;-L:Link链接路径;原创 2023-04-10 21:47:19 · 2387 阅读 · 0 评论 -
C/C++文档阅读笔记-A Simple Makefile Tutorial解析
上面定义了CC和CFLAGS两个宏,目的是方便makefile后面的脚本使用,CC=gcc并且后面的$(CC) -o hellomake hellomake.o hellofunc.o说明这个CC=gcc是使用C编译器,CFLAGS列出来标签的list, -I . 编译成.o文件需要依赖当前目录的.h文件。没用makefile文件,程序员对代码进行修改后,就需要不停按键盘的↑键去找对应的命令进行编译,如果新增了一个.c文件,还需要修改对应的命令。(可以用“\”来转义,以“\%”来表示真实含义的“%”字符)原创 2023-03-30 09:10:46 · 3306 阅读 · 5 评论 -
Qt文档阅读笔记-Tetrix Example解析
Q_OBJECTpublic:private:在类的private中有几个成员变量,包括前端画线,各种挂机和按钮,按钮有开始游戏,暂停当前游戏和退出。TetrixWindow继承了QWidget,但QWidget父类不能构造自己想创建的结构,所以,一般用上面这种方式创建程序员想要的界面。TetrixPiece类为游戏区域创建俄罗斯方块,包括形状、位置、方块在游戏区域的位置范围。原创 2023-03-30 09:04:53 · 2316 阅读 · 0 评论 -
Arduino文档阅读笔记-4 WHEEL ROBOT CAR BASIC EXAMPLE
电机控制板,直接可以放到Arduino上面就可以了,用这个扩展板使用直流电机控制4个马达。使用扩展板上的M1,M2控制前面2个轮转,M3,M4控制后面两个轮子。下面这个实例来做一个最基础的4轮小车,下面将说明各个功能和代码。Arduino小车有很多种,包括2个轮子,4个轮子。首先写一段测试程序,测试马达能否正常转动。首先得先准备这样的一辆4个轮子的小车。原创 2023-03-27 09:00:30 · 1966 阅读 · 0 评论 -
Qt笔记-pro文件中添加-fpermissive
在Makefile里面写比较方便。老项目里面的库,一包含就报-fpermissive错误。我在Linux上成功了。原创 2023-03-13 09:18:43 · 2699 阅读 · 0 评论 -
C++设计模式-状态模式案例(用户每日充值获取不同的VIP状态)
不仅仅有VIP状态,还有个金币。每日首充可以获得10个金币,充得多获得20个金币,不充值扣5个金币。这个状态模式在2019年07月05号写过一篇,当时是把大话设计模式中C#的代码翻译成C++的。今天(2022年12月07日)需要用到这个,在此温习下,写个自己的案例出来。模拟2周(14天),有个用户类。用户需要每日充值,从而获取不同的VIP状态。这里的案例主要是这样的。原创 2023-01-03 09:05:59 · 1426 阅读 · 2 评论 -
Qt文档阅读笔记-Qt, QML, Widgets…What Is The Difference?
这个是个人总结和博文无关。Widgets相当于是和VB、MFC、C#这类竞争的。QML相当于是和Android、IOS这类移动端竞争的。原创 2022-12-27 15:05:46 · 1161 阅读 · 4 评论 -
Qt文档阅读笔记-Qt for Linux/X11 - Building from Source
首先得把这个下载下来。原创 2022-12-12 08:49:44 · 1300 阅读 · 1 评论 -
Qt笔记-pro文件配置include和lib及遍历文件夹及文件排序
pro文件里面也可以定义变量,比如DPI_INCLUDE和DPI_LIB,调用的时候用$${DPI_INCLUDE}和$${DPI_INCLUDE}就可以了。有QDir::Time、QDir::Size、QDir::Type这些比较常用。QDir::SortFlag::Name,就是按照文件名排序。首先是pro文件配置include和lib。连接include用INCLUDEPATH。LIBS为链接的动态和静态文件。原创 2022-11-28 15:33:51 · 2792 阅读 · 1 评论 -
C/C++语言笔记-递归、迭代、动态规划的区别与联系(手段就2种-递归/迭代)
递归:程序调用自身,从顶部将问题分解,通过解决掉所有分解出来的小问题,来解决整个问题。迭代:利用变量的原值推算出变量的一个新值。递归中一定有迭代,但是迭代中不一定有递归。动态规划:通常与递归相反,其从底部开始解决问题。将所有小问题解决掉,进而解决的整个问题。下面通过斐波那契数列相关代码来比较一下三者。斐波那契数列:1,1,2,3,5,8,11,13…原创 2022-11-21 20:59:18 · 847 阅读 · 0 评论 -
Qt文档阅读笔记-Zoom Line Example
i < 500;i++) {}这里可以看到这条直线数据,x轴是0~500,每1个单元一个点,y轴是qSin(M_PI / 50 * i) * 100,中学以来我们都知道sinx是个曲线图像,并且当x为π时,图像会与x轴相交,所以qSin(M_PI / 50 * i)的含义就是变化相位,变化成,当x取50的倍数时,图像与x轴相交,最后那个*100,是把sin函数从[-1,1]的值放大到[-100,100]。最后是在y轴加上一个0~20的随机数。我个人觉得是增加图形的毛刺感。原创 2022-10-31 09:09:19 · 772 阅读 · 0 评论 -
Qt文档阅读笔记-Hello Speak Example
官方的这个例子比较有意思,在此记录下,方便以后查阅。原创 2022-10-24 10:20:12 · 1781 阅读 · 6 评论 -
C++文档阅读笔记-Understanding nullptr in C++
NULL 是被定义为(void *)0,所以他也能被转换为int类型,所以fun(NULL)就搞不清,这个函数到底是调用fun(int N)还是fun(char *s)。在上面这段代码中,如果使用nullptr代替NULL。就不会告警了,因为nullptr可以隐式转换为任意指针类型,而NULL,不能进行隐式转换为int类型。在编程中经常会使用到指针为NULL(need of nullptr)。为什么使用nullptr就能解决这个告警?上面的代码出现了何种问题呢?这里编译器会报警告。原创 2022-10-17 09:12:13 · 624 阅读 · 0 评论 -
C++文档阅读笔记-Difference Between C Structures and C++ Structures
这里来讨论struct在C和C++的异同。在C++中struct和class极其相似。原创 2022-10-10 08:56:20 · 746 阅读 · 0 评论 -
Qt文档阅读笔记-Bluetooth Scanner Example
项目是这样的,主要有2个界面,一个是service,一个是device。当调用QBluetoothDeviceDiscoveryAgent,的start方法后,就会emit2个关键信号,分别是deviceDiscovered()和finished()。简单描述下就是当发现蓝牙设备后,会触发这个信号,并且将发现的设备以QBluetoothDeviceInfo的形式给到槽参数里面。这里主要想弄懂的是如何使用Qt的蓝牙类,扫描蓝牙的,所以主要关注点在。如果电脑上只有1个蓝牙,就不用这么麻烦了。原创 2022-10-04 14:42:52 · 1222 阅读 · 1 评论 -
C语言文档阅读笔记-Basics of File Handling in C
wb+:以二进制的方法打开可读可写文件,如果文件存在则清空文件内容,如果文件不存在就创建新的文件,如果存在不了就返回NULL。wb:以二进制的方法打开只写文件,如果文件存在则清空文件内容,如果文件不存在就创建新的文件,如果存在不了就返回NULL。w+:打开可读可写文件,如果文件存在则清空文件内容,如果文件不存在就创建新的文件,如果存在不了就返回NULL。w:打开只写文件,如果文件存在则清空文件内容,如果文件不存在就创建新的文件,如果存在不了就返回NULL。④写入文件(fprintf或fputs)。原创 2022-09-26 09:18:59 · 602 阅读 · 0 评论 -
C++文档阅读笔记-How to find Segmentation Error in C & C++ ? (Using GDB)
将上面的这个文件保存为Program1.cpp。打开终端,进入Program1.cpp所在目录。Segmentation Error:是在运行时对内存非法访问时报的错,比如非法读取内存。在下面这个例子中展示了如何在程序中找段错误,找到这个段错误是在程序代码的哪一行。现在就可以知道端错误在第8行*p = 1这个地方,这里输入quit就能退出了。注意:这里使用的是Linux的Ubuntu操作系统演示。这种报错在C/C++程序中很常见。这里会报出错,异常原因是段错误。如何使用GDB找到错误源。原创 2022-09-19 09:33:38 · 588 阅读 · 0 评论 -
C++文档阅读笔记-Core Dump (Segmentation fault) in C/C++
这篇博文比较有意思,在此记录下,方便以后查阅,同样也是在GeeksForGeeks看读到的。Core Dump/Segmentation fault这个报错是内存在告诉程序员“这块内存不属于你”。原创 2022-09-12 17:46:19 · 574 阅读 · 0 评论 -
C++笔记-auto_ptr&unique_ptr&shared_ptr&shared_ptr基本用法
看到这里想必都已经明白了,auto_ptr一般是在栈区进行创建,当栈区生命周期结束后,调用其自己的析构函数,而他自己的析构函数里面对_Myptr进行了delete。这里可以看到,但调用->这个符号后,他先看_Myptr有无值,如果有就调用get()方法。就会传*get()过来,这里差不多就可以猜到,这个get()方法,返回的就是_Myptr。其实auto_ptr就是一封装类,他将传入的指针放到了_Ty中,命名为_Myptr。从中可以看到,的确,get方法返回被包裹的指针。第一个问题就研究完了,原创 2022-09-05 19:37:23 · 587 阅读 · 0 评论 -
C++文档阅读笔记-Smart Pointers in C++ and How to Use Them
此篇博文,介绍了C++中智能指针,为何要使用智能指针,以及如何去用。指针可使得程序直接访问堆区内存。通过指针,可以直接对原始资源进行修改,也就是说指针指向的就是一手资源。原创 2022-08-29 08:43:22 · 638 阅读 · 0 评论 -
C++文档阅读笔记-Tuples in C++
tuple是个对象,这个对象能放很多元素,这些元素可以是不同类型的,这些元素在tuple中存储的顺序和放入tuple时的顺序一致。原创 2022-08-15 08:40:24 · 552 阅读 · 0 评论 -
七夕专属博文-使用QGraphics画“红心“或“黑心“(含数学模型讲解)
实现的效果是这样的,使用QGraphicsEllipseItem和QGraphicsPolygonItem画“心”。比如来个红心。原创 2022-08-01 14:04:32 · 1436 阅读 · 8 评论 -
Qt笔记-利用QAxObject将文件夹内的所有docx转pdf
这里用Qt提供的AXContainer库就可以了,但这个只能在Windows平台上用。FileType为17代表是pdf。FileName文件名;原创 2022-07-29 08:50:11 · 1274 阅读 · 1 评论 -
Laravel笔记-用户登录时密码进行RSA加密(提高系统安全性)
提交时只要带上加密好的password和对应的type。因为C++端是跑马灯的形式,有24个公钥私钥。需要指定是哪一个,才能解密。万一中途xx路由器被入侵了。被人抓到这个包,本来就是http的,又是明文,太不安全了。所以这里做一个加密。前段时间写了一篇提高Laravel用户登录,登录失败5次后,锁帐号的功能。后台验证时,当格式验证成功后,对password进行RSA解密。Qt每小时生成RSA公钥和私钥,并且提供加解密的HTTP接口。...原创 2022-07-24 08:52:54 · 8757 阅读 · 0 评论