- 博客(43)
- 收藏
- 关注
原创 QT动态加载动态库 QLibrary
1.将生成的dll文件和接口文件(interface.h)拷贝到测试工程.pro目录下,新建一个lib文件夹放进去。这里构建好之后,可以在bin目录下找到dll文件(linux下是.so文件),这个就是之后要用到的库文件。注意:构建的时候选择MinGW,那么测试工程也要选择MinGW。三、如果要在linux下测试,只需要拷贝对应的so文件即可。一、新建一个工程Demo,作为动态库工程。1.创建接口文件,供库工程和测试工程使用。2.创建要导出的类 Demo,并继承。2.在测试工程的.pro文件配置。
2025-07-19 16:17:30
310
原创 linux qt 使用log4cpp库
(你可以直接放将include lib文件夹放在根目录,我这里新建一个文件夹将它们都放进去)下载地址:https://log4cpp.sourceforge.net/1.将上面生成的两个文件夹:include lib直接拷贝到测试工程目录下。这样可以看到在文件中输出的日志和在控制台输出的日志。(自己新建一个测试工程,不用界面)2.进入文件夹内部,打开终端。3.终端中依次输入以下命令。1.将文件夹解压出来。2.在.pro中写入。
2025-07-07 22:28:42
278
原创 qt实现一个简单http服务器和客户端
1.不管是服务器还是客户端,都要在.pro文件中添加。登录功能、下载文件功能、上传成绩功能。客户端输入用户名与密码,点击登录。分别运行服务器与客户端程序。登录功能、下载文件功能。
2025-03-21 14:35:27
1264
原创 c++基础:34. optional(c++17)
std::optional 提供了一种方式来表示可能不存在的值,避免了使用空指针的问题,并提供了更好的类型安全性。
2024-08-06 18:25:35
122
原创 c++基础:32.预编译头文件
作用:抓取一堆头文件,将它们转化为编译器可以使用的格式,而不用重复读取这些头文件,这些代码只编译一次。右键pch.cpp 属性,选择创建,点击应用。编译项目,可以发现编译时间大量减少。右键项目属性,选择使用,点击应用。
2024-08-04 19:05:51
148
原创 c++基础:25.函数指针和lambda
lambda本质上是定义匿名函数的方式。匿名函数–顾名思义,没有名字的函数。[]表示捕获方式,控制如何传入传出参数。[&] 表示引用传递外部所有变量。[=]表示值传递外部所有变量。[&b]表示传递b变量。
2024-07-19 21:38:21
313
原创 c++基础:24.std::array标准数组
arr<int,5>:第一个参数为数组类型,第二个为数组大小。2.没有性能损失,有普通c数组一样。
2024-07-19 20:39:28
196
原创 c++基础:22.栈和堆
在栈中分配变量时,栈指针(栈顶部的指针)移动相应变量大小的字节,分配int就移动4个字节。栈中分配的内存是连续的。使用new实际上调用了malloc函数,在堆上分配内存,内存是不连续的。通常是一个预定义大小的内存区域,一般为2兆字节。
2024-07-17 15:12:26
220
原创 c++基础:21.模板
这并不是一个定义好的函数,只有调用这个函数的时候,例如:Print(6);这时这个具体的函数才被创建,并作为源代码编译。如果没有调用模板函数,那么这个函数就不会被创建和编译。
2024-07-16 22:50:32
144
原创 c++基础:19.静态库与动态库
静态链接是在编译时发生的,编译静态库时,将库链接到可执行文件中。静态库就存在于可执行文件中。动态链接是在运行时发生的,当可执行文件运行时,才会加载动态库。
2024-07-14 22:13:15
111
原创 c++基础:18.vector
我们通过断点的方式发现,在main()函数运行第二行后发生了第一次拷贝,运行第三行后又发生了两次拷贝,运行第四行后又发生了三次拷贝。这是vector进行了三次扩容。为什么还有三次拷贝,这是因为我们先通过构造函数Demo(1,2)构造了一个对象,然后复制到vector中的。vector会重新分配新的内存,分配一块新内存,将旧内存中数据复制到新内存,然后释放旧内存。emplace_back(),会根据传入的参数直接构造一个给定类型的对象。1.预估大小,避免扩容。
2024-07-14 21:16:20
250
原创 c++基础:17.智能指针
不控制所指对象的生存期,指向由一个shared_ptr所管理的对象,将weak_ptr绑定到一个shared_ptr不会改变shared_ptr引用计数,当最后一个指向对象的shared_ptr被销毁,对象会被释放。共享智能指针,多个shared_ptr可以指向同一个对象。当指向一个对象的最后一个shared_ptr被销毁时,shared_ptr类会通过析构函数自动销毁此对象。某个时刻只能有一个unique_ptr指向一个给定对象,当unique_ptr被销毁时,它所指对象也被销毁。
2024-07-12 16:23:53
288
原创 c++基础:16隐式转换与explicit
b可以正常初始化,a不可以。因为这条语句做了两次隐式类型转换,一次是const char *转为string,再一次是string转为Demo。
2024-07-11 23:55:20
233
原创 c++基础:15.const与mutable
编译是不会通过的,因为常量引用表示不会修改引用对象,而GetX()不是常函数,所以是可以修改对象的,所以必修要在函数名后面加const。在方法名后面加const,表示不会修改这个类中的任何东西。mutable修饰的变量,可以在常函数中修改。const与常量引用。
2024-07-11 17:22:16
134
原创 c++基础:13.数组
下标法访问第n个元素,就是访问相对于首地址的 n*sizeof(int)的地址偏移。一维数组代表一组同类型数据的集合。数组中内存是连续的。
2024-06-29 15:29:59
248
原创 c++基础:12.虚函数
基类中想要声明为虚函数的,要在前面加vitual,派生类中,重写的虚函数要在函数后加override关键字,override可以省略,建议添加有助于阅读。People类只有一个纯虚函数,可以将People类称为接口类,接口类不能实例化对象。派生类Student必须实现基类中的纯虚函数,否则也不能实例化对象。因为在类中正常声明的函数或方法,当调用这个方法的时候,总会去调用属于这个类型的方法。纯虚函数允许在基类中定义一个没有实现的函数,强制在基类中进行实现。
2024-06-28 16:15:41
212
原创 c++基础:8.枚举
Leve 不是命名空间,这个枚举存在与Demo中,所以要使用Demo::ERROR。A默认值是0,B默认值1,C默认值2,以此类推。枚举就是某一组值的集合,枚举值是一个整数。
2024-06-23 18:19:05
129
原创 c++基础:7.类与static
类内部使用static,表示这部分内存是这个类的所有实例所共享的。也就是不管实例化多少类对象,static修饰的变量只有一个实例。build是不通过的,因为链接的时候会发现test.cpp和demo.cpp这两个编译单元都有fun这个函数。类外使用static修饰的符号,在链接(link)阶段是局部的,只对定义它的编译单元(.obj)可见。static修饰的变量或方法,链接器不会在这个编译单元(cpp)外找它的定义。1.所有类的实例对象,共享static修饰的变量。2.静态方法不能访问非静态变量。
2024-06-23 17:47:48
463
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人