自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BadFlag

程序员界的一名小学生^_^

  • 博客(25)
  • 收藏
  • 关注

原创 CMake纯学习记录笔记

函数使用示例定一个宏。

2023-07-10 15:38:49 204

原创 Qt界面布局基础操作详解

界面开发一般是根据UI的原型图进行的,不管是使用拖拽的方式还是使用手动布局的方式,个人感觉都是分而之治,特别是复杂界面。个人做法一般是首先将整个界面大体分割成水平或者垂直布局,然后在依次分析每个布局中嵌套哪些布局,按照层级依次进行分析。最终将形成一张线格图,原UI图中的每一个控件都有对应的格子来存放,这样才能将一个最接近原型图的界面开发出来。布局一般就是多练,而且不能使用拖拽的方式。个人认为这个方式虽然快但是失去了很多学习布局接口机会,而且自动生成的代码也很臃肿。

2023-06-26 09:39:20 1349

原创 扁平窗口实现(三) 标题栏窗口

基于Qt的QWidget实现自定义扁平化控件

2023-06-21 08:00:00 204

原创 扁平窗口实现(二) 无边框可缩放控件

这个目前只能识别出鼠标点击时是要改变大小还是移动,在改变大小时还不能区分到底是往8个方向的哪个方向变化。区域分割完成后就是根据区域在鼠标移动到该区域之内时,改变对应方向的形状,形状改变是成对出现,分别是。至此,鼠标判断悬浮区域以及改变鼠标形状的功能基本完成,后边就是点击鼠标进行大小和位置的改变。是一个边界的宽度,鼠标在这个区域内按下会视为要进行控件大小的改变,这个。先判断当前点击鼠标的功能到底是移动还是改变大小,因此,定义两个变量。函数,并将当前鼠标位置传入,判断是否点击在。计算比较简单基本就是对应。

2023-06-20 08:00:00 135

原创 扁平窗口实现(一) 无边框可拖拽控件

由于都是相对于控件本身的位置做计算,因此,每次移动距离的点的计算结果基本是。由于都是相对于控件本身的位置做计算,因此,每次移动距离的点的计算结果基本是。枚举值就可以实现扁平化,当然,如果需要有很窗口状态需要设置可以使用。中记录是否鼠标左键被点击(一般是点中鼠标左键移动窗口)。件本身) - 记录的点的位置 = 移动的距离。可设置的状态标志有很多可以在帮助文档中搜索。结合标志位和记录的最后点击位置,在。中记录鼠标按下的位置。中计算移动的距离,通过。然后将多个枚举变量用。定义一个标志位变量在。

2023-06-19 08:00:00 68

原创 Linux编程学习笔记-网络编程之TCP基础

网络编程学习-TCP基础知识

2022-08-31 09:05:53 607 1

原创 Linux编程学习笔记-多进程编程

Linux进程编程学习笔记

2022-08-19 08:49:10 975

原创 泛型编程基础知识详解

学习C++泛型编程基础部分笔记

2022-07-15 18:01:46 367

原创 C_C++算法_堆排序

堆排序特点堆是非线性数据结构,相当于一维数组,有两个直接后继。堆通常是一个可以被看做一棵树的数组对象,堆总是满足两个条件堆中某个结点的值总是不大于或不小于其父结点的值和堆总是一棵完全二叉树。堆排序的最典型应用就是优先队列,根结点最大的堆叫做大顶堆,根结点最小的堆叫做小顶堆。因此,二叉堆排序是在插入元素和删除元素的时候进行的。堆是一个一维数组,同时也是一棵完全二叉树。因此,可以将堆按照从上到下从左到右的顺序将数组的索引号与树的各个节点进行映射,如下所示:具体映射关系是任意父节点左边的索引号是自身的2

2022-04-20 22:23:09 1142 1

原创 Linux编程学习笔记-Linux系统文件编程详解

Linux系统文件编程详解Linux文件操作命令ls命令cp命令mkdir命令mv命令cat命令rm命令grep命令more命令Linux文件系统Linux文件编程打开文件关闭文件读取文件写入文件文件偏移量获取文件状态文件锁定内存映射Linux文件操作命令ls命令功能:列出指定目录下的内容及其相关属性信息语法:ls [参数选项] [文件]常见参数:-a显示所有文件以及目录,包括'以"."开头的隐藏文件'-l使用长格式列出文件及目录信息-r将文件以相反次序

2022-01-25 22:57:44 1115

原创 VS2019编译 ODB 开源项目以及示例程序运行详解

文章目录编译准备配置ODB工具环境编译ODB运行时库编译ODB驱动Sqlite源码编译libodb-sqlite-2.4.0编译运行实例程序编译准备ODB是一个开源、支持多平台、多数据库基于C++的ORM框架,可将C++类对象与数据库表映射,进行轻松的数据库查询和操作,编译使用时需要在官网下载三个库包括:odb-2.4.0-i686-windows、libodb-2.4.0、libodb-sqlite-2.4.0,作为学习还需要下载odb-examples-2.4.0。配置ODB工具环境odb-2

2022-01-03 00:22:22 1960 2

原创 Clion + OpenCV4.5.4 + VS2019配置详解

Clion + OpenCV4.5.4 + VS2019配置详解环境变量配置创建测试项目编辑CMakefileLists设置OpenCV路径查找模块文件拷贝动态库OpenCV内置变量设置附加目录测试程序环境变量配置下载并安装OpenCV,安装后的目录如下:本文使用的是VS2019的带的VC16版本的编译器,环境变量配置如下:创建测试项目使用Clion创建C++项目,由于使用的OpenCV是VC14的库,创建时语言标准也选择14,如下图所示:编辑CMakefileLists设置OpenCV

2021-12-30 09:41:50 2931

原创 C++ map容器学习笔记

文章目录map初始化添加元素访问元素删除元素multimap初始化添加数据访问元素删除元素unordered_map初始化添加元素访问元素删除元素自定义类型键unordered_multimap初始化添加元素访问元素删除元素map初始化创建一个key=string且value=int的map空容器。#include <map>int main(int argc, char * argv[]) { std::map<std::string, int> map_v

2021-12-09 08:57:37 340

原创 C++序列容器学习笔记

文章目录序列容器分类array数组容器初始化访问元素迭代器容器比较vector向量容器初始化容量和扩容访问元素迭代器添加元素删除元素deque双向队列容器初始化访问元素添加和删除元素list链表容器初始化访问元素序列容器分类array<T, N>[数组容器]一个固定长度的序列,有N个T类型的对象,不能增加或删除元素。vector[向量容器]一个可变长度的序列,用来存放T类型对象,可自动增加容量,只能在末尾高效地增加或删除元素。deque[双向队列容器]一个

2021-11-23 09:06:23 208

原创 Qt 三种使用线程方式详解

Qt 三种使用线程方式详解线程生命周期创建与使用QThread创建启动QRunnable创建启动moveToThread创建启动线程生命周期在正常情况下线程的生命周期,首先是创建一个线程对象,设置一些线程参数,例如,名字和优先级之类的,这是第一步。然后调用start()方法,这时线程并不会真正开始运行了,此时,只是准备就绪阶段,表示线程可以运行了,但是还没有开始运行。没有开始是因为在等待抢占到CPU的执行权限,一旦获得了执行权限就会开始执行执行run()方法的内容,直到run()方法退出了或者调用了中断

2021-09-30 09:20:04 17265 6

原创 QTableView表格控件代理详解

QTableView表控件的代理开发步骤

2021-09-18 14:27:30 5761 5

原创 QTableView详细使用说明

QTableView详细使用说明创建QTableView表格标题设置表格的标题获取表格的标题数据操作插入数据删除数据属性设置设置表格的对齐方式设置表格的宽高设置表格的线属性自定义菜单重载eventFilter()启用事件监听实现事件过滤函数创建QTableViewQTableView是一种View/Model模式在创建QTableView表格的时,除了创建QTableView对象还需要创建对应的Model对象,Model对象负责表格中的数据单元添加、单元格删除和设置表格标题等操作,一般常见的就是QSta

2021-05-16 11:41:36 51127 4

原创 Window网络编程之粘包和拆包

Window网络编程之粘包和拆包发送与接收SO_SNDBUFSO_RCVBUF粘包和拆包Nagle算法MTUMTU传输优化算法规则处理方式定长协议变长协议发送与接收在TCP的Socket中有两个缓冲区分别是发送缓冲区(SO_SNDBUF)和接收缓冲区(SO_RCVBUF)。SO_SNDBUF每次程序调用send发送数据时将要发送的数据先拷贝到发送缓冲区中,然后send函数返回了。也就是说,send函数结束后数据可能并没有发送到对端,仅仅是把应用层的buffer中的数据放到了socket内核的缓冲区。

2021-04-07 08:53:37 331

原创 Window网络编程之Select模型

目录select基本原理使用需求服务端select模型初始化select观察事件客户端select模型select基本原理网络通信被Unix系统抽象为文件的读写,通常是一个设备由设备驱动程序提供,驱动可以知道自身的数据是否可用,设备的文件的资源如果可用则会通知进程,反之则会让进程睡眠,等到数据到来可用的时候,再唤醒进程。select就是将这些设备的文件描述符被放在一个数组中,然后select调用的时候遍历这个数组,如果对于的文件描述符可读则会返回改文件描述符。当遍历结束之后,如果仍然没有一个可用设备文

2021-03-29 09:09:02 417

原创 Window网络编程之简单TCP建立

Windows下Socket编程之简单TCP通信步骤分解搭建SOCKET开发环境开发环境说明启动SOCKET说明创建TCP服务器创建SOCKET原型使用绑定端口原型使用监听连接原型使用连接客户端原型使用向客户端发送数据原型使用关闭服务器原型使用创建TCP客户端创建SOCKET使用连接服务器原型使用接收数据原型使用运行结果步骤分解服务端建立步骤说明涉及函数建立服务端SOCKETsocket绑定服务IP和端口bind监听网络端口listen等待建立连接ac

2021-03-27 21:05:31 886

原创 C++线程开发_锁

C++线程开发_锁线程执行顺序互斥量(mutex)lock和unlocklock_guardunique_lock等待函数等待函数解析线程执行顺序在启动多个线程时线程的执行顺序完全却决于CPU的线程调度机制有关,因此可能存在线程运行期间是无法保证顺序的,而且随时会被切换到另一个线程,线程的调度不可控因此也就产生了多个线程访问同一个数据时,造成数据脏读这一类问题,其中最经典的例子就是多个线程买票问题,简单示例代码如下:#include <iostream>#include <thre

2021-03-02 11:20:00 226

原创 C++线程开发_使用基础

C++线程的基础使用包括各种创建启动线程的方式

2021-03-02 11:08:55 494

原创 C++智能指针使用详解

C++智能指针总结概述shared_ptr的基础使用方式成员函数use_count()swap()reset()unique()get()管理数组weak_ptr成员函数lock()expired()unique_ptr成员函数概述在开发C++代码时,内存管理是一个很麻烦的事情在编程过程中最好的习惯是谁申请谁释放。但是,常常有人会忘记在new后使用delete、在malloc之后使用free或者最糟糕的是根本不知道谁创建的。这就有了智能指针的用武之地,智能指针可以保证在一定作用域内指针是安全有效,除了作

2021-03-02 09:20:26 2096

原创 UML类图绘制_常见设计模式

UML类图常用的类图元素UML类图的应用创建型模式简单工厂模式工厂方法模式抽象工厂模式建造者模式单例模式模式结构型模式适配器模式桥接模式装饰模式门面模式享元模式代理模式结构型模式命令模式中介者模式观察者模式状态模式策略模式常用的类图元素电脑类图结构为<<abstract>>,表示电脑是一个抽象类;电脑类有两个继承类分别为平板电脑和台式电脑,电脑类与两个继承类之间的关系为实现关系,使用空心箭头的虚线表示;平板电脑与MetePad Pro之间也是继承关系的一种,它们

2021-03-02 08:59:42 1146

原创 C_C++算法_排序算法

整合几种典型排序算法思路、代码实现和测试结果

2021-02-22 15:20:54 444

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除