- 博客(13)
- 资源 (13)
- 收藏
- 关注

原创 信号槽触发原理分析以及信号槽连接类型源码剖析
任何从QObject派生的类都包含了自己的元数据模型,一般是通过宏Q_OBJECT定义来引入。信号槽是观察者模式的一种实现,特性如下:A、一个信号就是一个能够被观察的事件,或者至少是事件已经发生的一种通知;B、一个槽就是一个观察者,通常就是在被观察的对象发生改变的时候——也可以说是信号发出的时候——被调用的函数;C、信号与槽的连接,形成一种观察者-被观察者的关系;D、当事件或者状态发生改变的时候,信号就会被发出;同时,信号发出者有义务调用所有注册的对这个事件(信号)感兴趣的函数(槽)。信号和槽是
2021-06-29 15:49:54
551

原创 最全面的gtest的TEST宏源码解析及自动调度机制
GTEST的TEST原理分析及自动调度解析介绍Gtest是google开发的一个开源的C++测试框架,可在Linux, Windows,Mac多个平台上对C++源码进行测试,它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。使用gtest时,就是编写断言(assertions),断言语句会检测条件是否为真。一个断言可存在三种结果:success(成功),nonfatal failure(非致命失败),或 fatal failure(致命失败)。当出现致命失败时,终止当前函数;否则程序继续
2021-06-17 10:54:16
2815
1

原创 类之间的相互引用以及如何避免类之间的循环依赖
集成开发环境(IDE)整合了编辑器、编译器、链接器,调试、部署等功能,我们在编辑器里写好的C/C++文件一开始以ASCII字符集存储在硬盘里,计算机只能识别机器语言(二进制指令,又称BCD码),为此,编译器的功能是将写好的源文件(C/C++)按照一定的对应规则映射成计算机能够识别的二进制指令,也就是我们常说的编译过程。编译是指把文本形式源代码翻译为机器语言形式的目标文件(windows下是.ob...
2019-05-05 20:21:06
2775

原创 引用声明与定义声明的区别及如何使用extern引用外部全局变量
这两种变量声明:定义声明:简称定义,给变量分配存储空间,引用声明:简称声明,不分配空间,引用已有的变量。2.声明可以多次,但是定义只能一次。,对变量来说,必须加extern才是引用声明,对函数来说,函数声明默认就是extern。当不包含头文件而希望访问其他源文件的外部变量或者外部函数时时,都必须提前对他做引用声明,才能使用外部变量或函数,如:在definition.cpp里定义声明in...
2019-04-22 11:58:05
4039
1
原创 QT线程类相关
文章目录线程相关线程类Qt线程三种使用:QThreada.继承QThreadQObject的moveToThreadQThreadPool + QRunnableQtConcurrent与线程相关的connect连接类型互斥锁:QMutexQMutexLocker上锁,解锁的原理:读写锁QReadWriteLock信号量QSemaphore条件变量 QWaitCondition线程相关线程类Qt线程三种使用:QThreada.继承QThread重写QThread的run()函数,由于QThrea
2022-06-09 21:01:51
946
1
原创 Qt creator创建窗口应用过程
QT creator 是用于开发QT程序的IDE,集成了QT designer, Assistant,Linguist。通常使用QT Creator来构建QT应用,QT designer来设计GUI:如果要利用QT设计师开发一个项目,则过程为:第一步:创建QT application,并创建窗口应用:第二步:选择Qt的编译系统,编译系统可选择项有:qmake,CMake,Qbs,通常使用qmake来构建默认的makefile文件。第三步:为你QT窗口类定制基础类框架,如果需要生成界面窗口文件
2021-06-29 15:48:29
1867
原创 gcov代码覆盖率实现逻辑:
使用gcov分析器,可以找到一些基本的性能统计数据:每一行代码执行的频率是多少实际执行了哪些行代码,配合测试用例达到满意的覆盖率和预期工作每段代码使用了多少计算时间,从而找到热点优化代码gcov创建一个sourcefile.gcov的日志文件,此文件标识源文件sourcefile.c每一行执行的次数。注意:gcov只在使用GCC编译的代码上工作。它与任何其他概要或测试覆盖机制不兼容。过程:使用gcov实现代码覆盖率,通过lcov等前端工具实现统计数据图形化。编译时,必须添加编译器参数-fpr
2021-06-29 15:42:13
696
原创 vim知识总结及常见命令
配置vim属性:在自己的home目录下,新建.vimrc的配置文件,配置vim属性基本属性:set smarttabset tabstop=4set shiftwidth=4set smartindentset numberset viminfo='1000,<500let &termencoding=&encodingset fileencodings=utf-8,gbkset laststatus=2vim速查表分屏显示· vim -On file1
2021-06-29 15:40:11
308
原创 元对象系统的moc工具、rcc工具、uic工具
QT core模块是QT GUI的核心模块,主要涵盖的核心功能:Qt Data Types:数据类型Qt Object Model:对象模型(包括元对象模型()、属性系统、信号与槽机制、对象树,智能指针等)Input/Output Classes:I/O读写Threading and Concurrent Programming:多线程和并发编程QCoreApplication:应用程序类Event System :事件系统Container Classes:容器类Animat
2021-06-29 15:35:24
957
原创 进程通信的管道
进程通信每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核(开辟内存等需要内核态函数),在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。通信本质:进程之间可以看到同一份公共资源,而提供这份资源的形式或者提供者不同,造成了通信方式不同。#include <sys/types.h>#include <sys/stat.h>#inclu
2020-08-25 17:47:00
138
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人