C++ 网络编程项目fastDFS分布式文件系统(六)--qt(client)+login

news/2024/7/7 19:52:39

目录

1. 登录和注册协议

1.1 注册协议

1.2 登录协议 

2. 单例模式


1. 登录和注册协议

        1.1 注册协议

                

# URL
http://192.168.1.100:80/reg
# post数据格式
{
userName:xxxx,
nickName:xxx,
firstPwd:xxx,
phone:xxx,
email:xxx
}
2. 服务器端 - Nginx 服务器端的配置。
        
location /reg
{
# 转发数据
fastcgi_pass localhost:10000;
include fastcgi.conf;
}
3.编写 fastcgi 程序
        
int main()
{
while(FCGI_Accept() >= 0)
{
// 1. 根据content-length得到post数据块的长度
// 2. 根据长度将post数据块读到内存
// 3. 解析json对象, 得到用户名, 密码, 昵称, 邮箱, 手机号
// 4. 连接数据库 - mysql, oracle
// 5. 查询, 看有没有用户名, 昵称冲突 -> {"code":"003"}
// 6. 有冲突 - 注册失败, 通知客户端
// 7. 没有冲突 - 用户数据插入到数据库中
// 8. 成功-> 通知客户端 -> {"code":"002"}
// 9. 通知客户端回传的字符串的格式
printf("content-type: application/json\r\n");
printf("{\"code\":\"002\"}");
}
}
服务器回复的数据格式 :
        

1.2 登录协议 

        1. 客户端

#URL
http://127.0.0.1:80/login
# post数据格式
{
user:xxxx,
pwd:xxx
}

        2. 服务器端

        Nginx服务器配置

location /login
{
# 转发数据
fastcgi_pass localhost:10001;
include fastcgi.conf;
}

        服务器回复数据格式

// 成功
{
"code": "000",
"token": "xxx"
}
// 失败
{
"code": "001",
"token": "faild"
}

2. 单例模式

1. 单例模式的优点 :
在内存中只有一个对象 , 节省内存空间 ,避免频繁的创建销毁对象, 可以提高性能,避免对共享资源的多重占用 可以全局访问。
2. 单例模式的适用场景
        需要频繁实例化然后销毁的对象
        创建对象耗时过多或者耗资源过多, 但又经常用到的对象
struct More
{
int number;
...(100)
}
有状态的工具类对象 ,频繁访问数据库或文件的对象 ,要求只有一个对象的场景
3. 如何保证单例对象只有一个 ?
// 在类外部不允许进行new操作
class Test
{
public:
// 1. 默认构造
// 2. 默认析构
// 3. 默认的拷贝构造
}
// 1. 构造函数私有化
// 2. 拷贝构造私有化
4. 单例模式实现方式 ?
懒汉模式 - 单例对象在使用的时候被创建出来 , 线程安全问题需要考虑。
class Test
{
public:
static Test* getInstance()
{
if(m_test == NULL)
{
m_test = new Test();
}
return m_test;
}
private:
Test();
Test(const Test& t);
// 静态变量使用之前必须初始化
static Test* m_test;
}
Test* Test::m_test = NULL; // 初始化
饿汉模式 - 单例对象在使用之前被创建出来
        
class Test
{
public:
static Test* getInstance()
{
return m_test;
}
private:
Test();
Test(const Test& t);
// 静态变量使用之前必须初始化
static Test* m_test;
}
Test* Test::m_test = new Test(); // 初始化

3 qt: 内部操作

        1. QRegExp

        

QRegExp::QRegExp ();
QRegExp::QRegExp ( const QString & pattern , Qt::CaseSensitivity cs = Qt::CaseSensitive ,
PatternSyntax syntax = RegExp )
- pattern : 正则表达式 , 该对象继续数据校验的规则
bool QRegExp::exactMatch ( const QString & str ) const
- str : 被校验的字符串
- 返回值 : 匹配成功 : true , 失败 : false
// 重新给正则对象指定匹配规则
void QRegExp::setPattern ( const QString & pattern )
- pattern : 正则表达式

        2. 鼠标拖动窗口移动, 左上角坐标求解方法:

        
        

 

1. 在鼠标按下还没有移动的时候求差值 。差值 = 鼠标当前位置 - 屏幕左上角的点
2. 鼠标移动过程中
屏幕左上角的点 = 鼠标当前位置 - 差值
3. QSS 参考资料
< https://blog.csdn.net/liang19890820/article/details/51691212
4. 通过样式函数给控件设置样式
void setStyleSheet(const QString &styleSheet)
- 参数styleSheet: 样式字符串, css格式
- 在QT中参照帮助文档也可以

 

5. sourceInsight
        

 

 

 

// 刷新窗口
// 什么时候被回调?
// 1. 窗口第一次现实的时候
// 2. 窗口被覆盖, 又重新显示
// 3. 最大化, 最小化
// 4. 手动重绘 - > 调用一个api : [slot] void QWidget::update()
// 函数内部写的绘图动作 -> QPainter
[virtual protected] void QWidget::paintEvent(QPaintEvent *event);
- QPainter(QPaintDevice *device) -> 参数应该this
// 这个点是窗口左上角坐标
void move(int x, int y);
void move(const QPoint &);

Qt 中使用正则表达式进行数据校验 :。、
        
// 使用的类: QRegExp
// 1. 构造对象
QRegExp::QRegExp();
QRegExp::QRegExp(const QString &pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive,
PatternSyntax syntax = RegExp);
- pattern: 正则表达式
// 2. 如何使用正则对象进行数据校验
bool QRegExp::exactMatch(const QString &str) const;
- 参数str: 要校验的字符串
- 返回值: 匹配成功: true, 失败: false
// 3. 给正则对象指定匹配规则或者更换匹配规则
void QRegExp::setPattern(const QString &pattern);
- 参数pattern: 新的正则表达式
Qt 中处理 json
        
// QJsonDocument
// 1. 将字符串 -> json 对象 / 数组 ; 2. json 对象 , 数组 -> 格式化为字符串
// QJsonObject -> 处理 json 对象的 {}
// QJsonArray -> 处理 json 数组 []
// QJsonValue -> 包装数据的 , 字符串 , 布尔 , 整形 , 浮点型 , json 对象 , json 数组
1. 内存中的 json 数据 -> 写磁盘

 

2. 磁盘中的 json 字符串 -> 内存。

 

        

http://lihuaxi.xjx100.cn/news/1475328.html

相关文章

【开发】tips:视频汇聚/视频云存储/视频监控管理平台EasyCVR如何提升网络稳定

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

前端面试:【前端工程化】自动化测试工具 Jest、Mocha 和 Cypress

嗨&#xff0c;亲爱的前端开发者&#xff01;在构建高质量的前端应用程序时&#xff0c;自动化测试是不可或缺的一部分。本文将深入探讨三个流行的前端自动化测试工具&#xff1a;Jest、Mocha 和 Cypress&#xff0c;以帮助你了解它们的用途、特点以及如何选择适合你项目的测试…

开始MySQL探索——数据库概述

计算机语言 计算机语言概述 计算机语言&#xff08;Computer Language&#xff09;可以简单的理解为一种计算机和人都能识别的语言。 机器语言 汇编语言 高级语言 机器语言 汇编语言 高级语言 SQL语言基础 SQL的概述 SQL全称&#xff1a;Structured Query Language&…

储能运行约束的Matlab建模方法

最近一段时间有很多人问我最优潮流计算中储能系统的建模方法。部分朋友的问题我回复了&#xff0c;有些没有回消息的&#xff0c;我就不再一一回复了&#xff0c;在这里我写一篇博客统一介绍一下。 1.储能系统介绍 首先&#xff0c;让【GPT】简单介绍一下储能系统&#xff1a;…

Linux学习之vsftpd配置文件

/etc/vsftpd/vsftpd.conf是主要的vsftpd配置文件&#xff0c;主要涉及大的调整&#xff0c;cat /etc/vsftpd/vsftpd.conf | wc -l可以看到有128行内容。 /etc/vsftpd/ftpusers是禁止用户名单&#xff0c;/etc/vsftpd/user_list可以是白名单&#xff0c;也可以是黑名单。 /et…

美容行业如何快速搭建自己的预约小程序?

现在&#xff0c;搭建一个专属于美容行业的预约小程序不再是只有程序员才能做到的事情了。有了一些小程序制作平台的存在&#xff0c;任何人都可以轻松地制作出自己的小程序。下面&#xff0c;我将揭秘一个快速搭建专属美容行业预约小程序的秘诀。 首先&#xff0c;登录小程序制…

Docker容器与虚拟化技术:Gitlab账户注册

目录 一、实验 1.gitlab 一、实验 1.gitlab (1) 概念 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。 &#xff08;2&#xff09;官网 The DevSecOps Platform | GitLab &#xff08;3&#…

SpringBoot利用ConstraintValidator实现自定义注解校验

一、前言 ConstraintValidator是Java Bean Validation&#xff08;JSR-303&#xff09;规范中的一个接口&#xff0c;用于实现自定义校验注解的校验逻辑。ConstraintValidator定义了两个泛型参数&#xff0c;分别是注解类型和被校验的值类型。在实现ConstraintValidator接口时&…