- 博客(119)
- 资源 (39)
- 问答 (1)
- 收藏
- 关注
原创 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
1115
原创 QT系列教程(22) QT 实现电子相册(一)--目录树和向导
基于前面介绍的QT知识,做一个电子相册,总结前文介绍的各类知识,将用到QListWidget,QTreeWidget,双缓冲绘图,信号槽,动画效果,绘图事件,鼠标事件,qss等知识,算是对之前知识的一个总结。more效果如下。
2025-03-11 11:07:17
407
原创 QT系列教程(21) 自定义模型的拖动实现
便捷类的拖动实现很简单,今天我们介绍自己定义的ListModel模型如何实现拖动。在之前的ListModel项目基础上,我们先对View视图实现拖动操作.more//设置选择模式为单选//设置可拖拽//设置可拖放//设置显示拖放位置。
2025-03-11 11:06:06
392
原创 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
538
原创 QT系列教程(18) MVC结构之QItemSelectionModel模型介绍
QT MVC结构之QItemSelectionModel模型介绍
2025-03-10 16:43:04
1129
原创 利用redis实现分布式锁
然而,在分布式系统中,由于多个进程可能运行在不同的机器上,单纯依赖本地锁无法实现资源的同步访问。Redis 提供了简单且高效的分布式锁机制,尤其是通过 SET 命令配合 NX 和 PX 选项,可以实现基本的锁功能。为了提高锁的可靠性,建议使用多个 Redis 实例(如集群模式或主从架构),确保单点故障不会影响锁的功能。分布式锁引入了网络延迟,需评估锁机制对系统性能的影响,避免过度使用锁导致性能瓶颈。在析构函数中,如果锁仍被持有,则尝试释放锁,以防止因忘记释放锁导致的死锁。分布式锁通常不支持重入。
2025-03-10 16:35:40
451
原创 QT系列教程(12) QT 拖拽事件
拖拽事件是我们在设计软件时常用的事件,比如我们把要上传的文件拖拽到指定区域实现自动上传,或者拖动到指定文件夹等。这里主要介绍如何实现拖动事件,包括事件的进入dragEnterEvent, 事件的放弃dropEvent等。我们要实现一个拖动demo,将文件拖动到主窗口区域,然后在主窗口的textEdit控件中显示文件的内容。
2025-02-19 11:13:08
420
原创 C++ redis实现分布式锁
在单机环境中,常见的锁机制如互斥锁(Mutex)用于保护共享资源。然而,在分布式系统中,由于多个进程可能运行在不同的机器上,单纯依赖本地锁无法实现资源的同步访问。这就需要分布式锁来确保跨多个节点的互斥访问。分布式锁的关键特性:同一时刻只有一个客户端可以获取锁。锁有超时机制,防止因客户端故障导致的死锁。即使部分节点失效,锁机制仍然可靠。
2024-10-11 09:20:04
1415
原创 C++全栈聊天项目(22) 气泡聊天对话框
NameLabel用来显示用户的名字,Bubble用来显示聊天信息,Spacer是个弹簧,保证将NameLabel,IconLabel,Bubble等挤压到右侧。绘制的过程很简单,先创建QPainter,然后设置NoPen,表示不绘制轮廓线,接下来用设置指定颜色的画刷绘制图形,我们先绘制矩形再绘制三角形。BubbleFrame基类构造函数创建一个布局,要根据是自己发送的消息还是别人发送的,做margin分布。接下来在发送处实现文本和图片消息的展示,点击发送按钮根据不同的类型创建不同的气泡消息。
2024-06-16 09:22:07
928
1
原创 C++全栈聊天项目(21) 滚动聊天布局设计
最外层的是一个chatview(黑色), chatview内部在添加一个MainLayout(蓝色),MainLayout内部添加一个scrollarea(红色),scrollarea内部包含一个widget(绿色),同时也包含一个HLayout(紫色)用来浮动显示滚动条。widget内部包含一个垂直布局Vlayout(黄色),黄色布局内部包含一个粉色的widget,widget占据拉伸比一万,保证充满整个布局。重写paintEvent支持子类绘制。本节先到这里,完成聊天布局基本的构造。
2024-06-08 11:18:23
713
原创 QT系列教程(10) QTextEdit学习
QTextEdit是文本编辑器,支持富文本功能。接下来我们创建一个Qt Application 应用,然后在ui中添加一个QTextEdit插件。运行程序后,可以在QTextEdit中输入任何文字也包括富文本。源码链接。
2024-06-08 11:16:48
1604
原创 QT系列教程(9) 主窗口学习
任何界面应用都有一个主窗口,今天我们谈谈主窗口相关知识。一个主窗口包括菜单栏,工具栏,状态栏,以及中心区域等部分。我们先从菜单栏说起more源码链接。
2024-06-06 12:29:05
1032
原创 QT系列教程(7) QLineEdit介绍
QLineEdit属于输入插件,用来实现单行录入。支持几种录入模式。Normal表示正常录入,录入的信息会显示在QLineEdit上。Password表示密码录入的方式,录入的信息不显示QLineEdit,只是通过黑色圆点显示。NoEcho 表示不显示录入信息,类似于Linux输入密码时,显示的是一片空白。PasswordEchoOnEdit 表示在输入的一刹那可以看到字符,但是立刻变为不可见的黑色圆点显示。more源码链接。
2024-05-30 16:21:50
853
原创 QT系列教程(4) Qt 信号和槽
视频链接视频教程源码链接owMainSig两个信号连接起来,也可以实现消息的传递,让代码更简洁了。视频链接视频教程源码链接。
2024-04-11 16:40:24
1214
原创 QT系列教程(2) 创建项目和编译
在上面的项目里我们新增C++类,右键项目目录选择Add New,然后选择C++类我们将这个类命名为HelloDialog,Base选择custom,然后写入QDialog点击下一步直到完成此时编译会出问题,因为我们要在生成的hellodialog.h文件里包含Qdialog头文件和ui头文件,并且声明ui成员变量public:private:然后在hellodialog.cpp里加载我们的ui文件delete _ui;修改main.cpp,调用HelloDialog创建界面。
2024-04-11 16:36:04
2010
原创 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
658
原创 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
2420
原创 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
2317
用cocos2d-x C++开发的俄罗斯方块源码和apk
2013-11-16
多线程利用semophore同步的demo
2016-10-15
C++模板实现大根堆的插入删除以及初始化
2016-07-13
Xcode如何包含第三方的文件
2014-09-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人