C++
文章平均质量分 80
恋恋风辰
编程是我的使命,秃头是我的勋章。博客地址: https://llfc.club/ 哔哩视频教程: https://space.bilibili.com/271469206
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++全栈聊天项目(2) 单例模式封装Http管理者
我们先实现PostHttpReq请求的函数,也就是发送http的post请求, 发送请求要用到请求的url,请求的数据(json或者protobuf序列化),以及请求的id,以及哪个模块发出的请求mod,那么一个请求接口应该是这样的。网络请求类要做成一个单例类,这样方便在任何需要发送http请求的时候调用,我们先实现单例类,添加singleton.h实现如下。加下来HttpMgr内实现一个slot_http_finish的槽函数用来接收sig_http_finish信号。好了,这样就完成了。原创 2025-03-11 11:08:52 · 1972 阅读 · 0 评论 -
QT系列教程(22) QT 实现电子相册(一)--目录树和向导
基于前面介绍的QT知识,做一个电子相册,总结前文介绍的各类知识,将用到QListWidget,QTreeWidget,双缓冲绘图,信号槽,动画效果,绘图事件,鼠标事件,qss等知识,算是对之前知识的一个总结。more效果如下。原创 2025-03-11 11:07:17 · 594 阅读 · 0 评论 -
QT系列教程(21) 自定义模型的拖动实现
便捷类的拖动实现很简单,今天我们介绍自己定义的ListModel模型如何实现拖动。在之前的ListModel项目基础上,我们先对View视图实现拖动操作.more//设置选择模式为单选//设置可拖拽//设置可拖放//设置显示拖放位置。原创 2025-03-11 11:06:06 · 548 阅读 · 0 评论 -
QT系列教程(19) Qt MVC结构之QItemDelegate介绍
实现item编辑时特定的效果,比如在item编辑时我们设置一个QSpinBox返回。接下来我们在MainWindow的构造函数里创建两个model和view,我们对其中的一个view使用我们自定义的delegate。updateEditorGeometry是刷新editor的矩形区域,因为随着item变大或者拉伸,它的区域也要随之刷新。setEditorData是在item被双击进入编辑状态时,将model的内容写入editor中。运行程序后,双击两个view的item,可以看到效果的不同。原创 2025-03-11 11:04:40 · 768 阅读 · 0 评论 -
C++全栈聊天项目(1) 项目架构详解和注册登录界面
C++全栈聊天项目 项目架构详解和注册登录界面设计原创 2025-03-10 16:53:40 · 1464 阅读 · 0 评论 -
QT系列教程(20) Qt 项目视图便捷类
Qt 项目视图便捷类原创 2025-03-10 16:45:32 · 474 阅读 · 0 评论 -
QT系列教程(17) MVC结构之Model模型介绍
MVC结构之Model模型介绍原创 2025-03-10 16:40:33 · 1341 阅读 · 0 评论 -
QT系列教程(16) 定时器事件
定时器事件原创 2025-03-10 16:39:16 · 409 阅读 · 0 评论 -
QT系列教程(15) 鼠标事件
QT系列教程(12) 鼠标事件原创 2025-03-10 16:30:55 · 465 阅读 · 0 评论 -
QT系列教程(14) QT 按键事件
QT 按键事件原创 2025-03-10 16:29:39 · 597 阅读 · 0 评论 -
QT系列教程(13) 事件系统
运行程序就可以在滚轮滚动时缩放textEdit,按下空格键就可以使spinbox清零。原创 2025-03-10 16:27:56 · 1204 阅读 · 0 评论 -
QT系列教程(12) QT 拖拽事件
拖拽事件是我们在设计软件时常用的事件,比如我们把要上传的文件拖拽到指定区域实现自动上传,或者拖动到指定文件夹等。这里主要介绍如何实现拖动事件,包括事件的进入dragEnterEvent, 事件的放弃dropEvent等。我们要实现一个拖动demo,将文件拖动到主窗口区域,然后在主窗口的textEdit控件中显示文件的内容。原创 2025-02-19 11:13:08 · 625 阅读 · 0 评论 -
C++ redis实现分布式锁
在单机环境中,常见的锁机制如互斥锁(Mutex)用于保护共享资源。然而,在分布式系统中,由于多个进程可能运行在不同的机器上,单纯依赖本地锁无法实现资源的同步访问。这就需要分布式锁来确保跨多个节点的互斥访问。分布式锁的关键特性:同一时刻只有一个客户端可以获取锁。锁有超时机制,防止因客户端故障导致的死锁。即使部分节点失效,锁机制仍然可靠。原创 2024-10-11 09:20:04 · 2242 阅读 · 0 评论 -
QT系列教程(11) TextEdit实现Qt 文本高亮
源码链接。原创 2024-06-16 09:24:42 · 1566 阅读 · 0 评论 -
C++全栈聊天项目(22) 气泡聊天对话框
NameLabel用来显示用户的名字,Bubble用来显示聊天信息,Spacer是个弹簧,保证将NameLabel,IconLabel,Bubble等挤压到右侧。绘制的过程很简单,先创建QPainter,然后设置NoPen,表示不绘制轮廓线,接下来用设置指定颜色的画刷绘制图形,我们先绘制矩形再绘制三角形。BubbleFrame基类构造函数创建一个布局,要根据是自己发送的消息还是别人发送的,做margin分布。接下来在发送处实现文本和图片消息的展示,点击发送按钮根据不同的类型创建不同的气泡消息。原创 2024-06-16 09:22:07 · 1061 阅读 · 0 评论 -
C++全栈聊天项目(21) 滚动聊天布局设计
最外层的是一个chatview(黑色), chatview内部在添加一个MainLayout(蓝色),MainLayout内部添加一个scrollarea(红色),scrollarea内部包含一个widget(绿色),同时也包含一个HLayout(紫色)用来浮动显示滚动条。widget内部包含一个垂直布局Vlayout(黄色),黄色布局内部包含一个粉色的widget,widget占据拉伸比一万,保证充满整个布局。重写paintEvent支持子类绘制。本节先到这里,完成聊天布局基本的构造。原创 2024-06-08 11:18:23 · 812 阅读 · 0 评论 -
QT系列教程(10) QTextEdit学习
QTextEdit是文本编辑器,支持富文本功能。接下来我们创建一个Qt Application 应用,然后在ui中添加一个QTextEdit插件。运行程序后,可以在QTextEdit中输入任何文字也包括富文本。源码链接。原创 2024-06-08 11:16:48 · 1845 阅读 · 0 评论 -
QT系列教程(9) 主窗口学习
任何界面应用都有一个主窗口,今天我们谈谈主窗口相关知识。一个主窗口包括菜单栏,工具栏,状态栏,以及中心区域等部分。我们先从菜单栏说起more源码链接。原创 2024-06-06 12:29:05 · 1117 阅读 · 0 评论 -
QT系列教程(8) QT 布局学习
Qt 中的布局有三种方式,水平布局,垂直布局,栅格布局。more源码链接。原创 2024-06-06 12:24:16 · 1096 阅读 · 0 评论 -
C++全栈聊天项目(20) 聊天列表动态加载
全栈聊天项目实战原创 2024-06-06 12:22:07 · 1390 阅读 · 0 评论 -
C++ 封装线程池(结合QT支持信号机制)
C++ 封装线程池,利用C++11 特性原创 2024-05-29 16:08:11 · 810 阅读 · 0 评论 -
C++ 虚函数表原理和类的内存分布
C++ 虚函数表原理和类的内存分布原创 2022-08-02 11:35:45 · 1893 阅读 · 1 评论 -
C++ 重载重写覆盖的区别
C++ 重写覆盖重载原创 2022-07-28 23:43:49 · 641 阅读 · 0 评论 -
模板特例化和常用用法
C++ 模板类基本用法和 模板特例化介绍。原创 2022-07-24 18:34:23 · 797 阅读 · 0 评论 -
C++ 模拟实现vector
C++ 模拟实现vector原创 2022-06-21 21:53:51 · 680 阅读 · 0 评论 -
C++ 模板类型的原样转发和可变参数
C++ forward原样转发原创 2022-06-21 21:51:40 · 657 阅读 · 0 评论 -
C++ 模板类的友元和折叠规则
模板类折叠规则和友元类原创 2022-06-21 21:50:02 · 543 阅读 · 0 评论 -
C++ 类模板和函数模板
函数模板当我们想要定义一个可以支持泛型的函数时,就要采用函数模板的方式了。所谓泛型就是可以支持多种类型的操作,比如我们定义一个compare操作,他可以根据传递给他的参数类型动态调用对应的函数版本,实现多种类型的比较。template <typename T>int compare(const T &v1, const T &v2){ if (v1 < v2) return -1; if (v2 < v1) re原创 2022-04-30 18:38:49 · 722 阅读 · 0 评论 -
C++ 类的封装继承多态
C++ 特性C++ 三大特性,封装继承多态。我们先实现一个Quote作为基类class Quote{public: Quote() = default; Quote(const std::string &book, double sales_price) { price = sales_price; bookNo = book; } std::string isbn() const { retu原创 2022-04-28 22:16:16 · 2535 阅读 · 0 评论 -
C++ lambda和function
lambda表达式lambda表达式又称为匿名表达式,是C11提出的新语法。[]存储lambda表达式要捕获的值,()内的参数为形参,可供外部调用传值。lambda表达式可以直接调用 // 1 匿名调用 [](string name) { cout << "this is anonymous" << endl; cout << "hello " << name << endl; }("z原创 2022-04-11 22:31:01 · 2408 阅读 · 0 评论 -
C++ 运算符重载
C++ 运算符重载原创 2022-04-10 16:03:35 · 1223 阅读 · 0 评论 -
C++单例模式的几种实现
本文介绍C++单例模式的集中实现方式,以及利弊局部静态变量方式//通过静态成员变量实现单例//懒汉式class Single2{private: Single2() { } Single2(const Single2 &) = delete; Single2 &operator=(const Single2 &) = delete;public: static Single2 &GetInst() {原创 2022-03-20 16:47:21 · 6312 阅读 · 2 评论 -
C++ 面试常问问题(一)
这篇文章讲解C++ 面试常问的几个问题。本文通过demo讲解初始化列表,继承,字符串等常问问题。看下边这个例子初始化列表//基类class Base{public: Base() : m_nbase(0), m_nbase2(m_nbase + 100) {} Base(int n) : m_nbase(n), m_nbase2(m_nbase + 100) { cout << "this is Base construct " <<原创 2022-03-03 11:54:53 · 564 阅读 · 0 评论 -
C++ 右值引用与移动构造函数
右值与右值引用不能修改的值就是右值,右值一般为临时变量。常见的右值有字面常量值,返回右值的表达式。所谓右值引用就是必须绑定到右值的引用。我们通过&&来获得右值引用。右值引用有一个重要的性质——只能绑定到一个将要销毁的对象。因此,我们可以自由地将一个右值引用的资源“移动”到另一个对象中。void right_references(){ int i = 42; //r 为i的引用,左值引用 int &r = i; //rr 不可以引用左值i,原创 2022-03-01 15:21:12 · 831 阅读 · 0 评论 -
C++ allocator类使用示例
动态内存管理之前我们讲述过动态内存的开辟,可以通过new, malloc,以及alloc等方式,本文通过介绍alloc方式,构造一个StrVec类,这个类的功能类似于一个vector,实现字符串的管理,其中包含push一个字符串,动态扩容,析构,回收内存等操作。StrVec类实现细节StrVec类实现如下class StrVec{public: //无参构造函数 StrVec() : elements(nullptr), first_free(nullptr),原创 2022-02-10 11:04:11 · 938 阅读 · 0 评论 -
C++类的拷贝控制demo
拷贝控制有时候我们需要两个类对象互相关联,当其中一个对象修改后也要关联修改另一个,用这个例子说明拷贝控制的案例。我们有两个类,Message类表示信息类,Folder类表示文件夹类,Message类里有成员folders表示其所属于哪些文件夹。Folder类有成员messages表示其包含哪些messages,所以Folder和Message之间是互相包含,多对多的关系。同时我们要考虑Message类的拷贝,赋值,销毁等操作,如何同步处理其关联的Folder类。其关系图是这样的[外链图片转存失败,原创 2022-02-08 16:59:58 · 1023 阅读 · 0 评论 -
C++ swap操作
swap操作我们常用的交换两个数据的操作是这样void swap_int(int &a, int &b){ int temp = a; a = b; b = temp;}主函数调用是这样的 int a = 100, b = 200; swap_int(a, b); cout << "a is " << a << endl; cout << "b is " << b原创 2022-01-28 17:33:57 · 1652 阅读 · 0 评论 -
C++ 拷贝控制和资源管理
拷贝控制前文我们介绍了HasPtr类的拷贝控制,实现了行为像值的类,所谓行为像值的类就是我们所说的深拷贝,将一个类对象拷贝给另一个类对象时,其所有的成员都作为副本在新的类对象创建一遍,如果是指针类型的成员,则将指针指向的空间的数据复制一份给新对象,这样两个对象所有的成员都不关联,实现了深拷贝,不会受彼此影响。比如之前的HasPtr的拷贝构造HasPtr::HasPtr(const HasPtr &hp){ cout << "this is copy construtor"原创 2022-01-27 17:21:50 · 1098 阅读 · 0 评论 -
C++ 拷贝赋值和单例模式
拷贝构造函数一个类可以不定义拷贝构造函数,系统会默认提供一个拷贝构造函数,叫做合成拷贝构造函数。与默认构造函数不同的是,即使我们定义了其他构造函数,系统也会为我们生成合成拷贝构造函数。合成的拷贝构造函数会将其参数的成员逐个拷贝到正在创建的对象中。编译器从给定对象中依次将每个非static成员拷贝到正在创建的对象中。对类类型的成员,会使用其拷贝构造函数来拷贝;内置类型的成员则直接拷贝。为了方便举例,我们手动实现一个mystring类class mystring_{private: /* da原创 2022-01-26 16:56:42 · 1106 阅读 · 3 评论 -
利用容器和指针实现文本查询程序
简介本篇利用之前介绍的智能指针,关联容器,顺序容器等知识,做一个文本查询程序。该程序读取文本中的内容,然后根据输入的单词,判断该单词出现多少次,出现在哪些行,每行的句子是什么。比如我们输入elment,输出如下element occurs 112 times(line 36) A set element contains only a key;(line 158) operator creates a new element(line 160) Regardless of whether the原创 2022-01-21 17:59:55 · 896 阅读 · 0 评论
分享