当前位置: 首页 > article >正文

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录

一. 概要

二. 技术栈

三. 系统功能设计

3.1 功能模块

 3.2 数据表设计

四. 具体实现

4.1 Qt 服务端

4.1.1 初始化 WebSocket 服务器

 4.1.2 用户管理界面

 4.2 微信小程序端

4.2.1 注册功能

 4.2.2 登录功能

五. 运行效果

六. 源码下载


一. 概要

在物联网和智能设备管理领域,用户管理系统是一个核心模块。本文将介绍如何通过 Qt 和 微信小程序实现一个用户管理系统,其中Qt服务端运行在嵌入式Linux设备IMX6ULL上,支持用户和运维人员的注册与登录功能,并将数据存储到开发板设备的SQLite 数据库中。通过 WebSocket 实现实时通信,确保数据的高效传输。支持微信小程序端和Qt服务端同时对用户的个人信息数据进行增删改查操作。在微信小程序注册时,将数据通过WebSocket写入到开发板的SQLite数据库中,在进行登陆时,通过WebSocket校验输入的用户名和密码与开发板SQLite数据库中的数据进行对比,当数据存在且正确是可登陆进系统。如下为IMX6ULL服务端:

                                                                IMX6ULL服务端

二. 技术栈

  • Qt服务端:用于开发桌面端管理界面,提供用户和运维人员数据的展示和管理功能。
  • 微信小程序:作为移动端入口,提供用户注册和登录界面,登录成功后跳转到对应的界面。
  • WebSocket:实现微信小程序与 Qt 服务端的实时通信,用于存储和校验开发板服务端数据库中的数据。
  • SQLite:轻量级数据库,用于存储用户信息。

三. 系统功能设计

3.1 功能模块

1. 用户注册:

  • 用户通过微信小程序填写用户名、密码和角色(用户或运维人员)。
  • 数据通过 WebSocket 发送到开发板Qt服务端,并存储到 SQLite 数据库。

2. 用户登录:

  • 用户通过微信小程序输入用户名和密码。
  • Qt服务端验证用户信息,返回登录结果。

3. 用户管理:

  • Qt服务端提供管理人员对用户和运维人员的个人信息进行增删改查等的操作。

 3.2 数据表设计

在 SQLite 中创建 users 表,存储用户信息,其中包括用户的id,用户名,用户密码,用户角色(用于标识用户和运维人员):

CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT NOT NULL UNIQUE,password TEXT NOT NULL,role TEXT NOT NULL
);

四. 具体实现

4.1 Qt 服务端

4.1.1 初始化 WebSocket 服务器

在Qt程序中创建一个WebSocket服务器,监听来自微信小程序的连接请求。以下为建立服务端的主要代码:

// WebSocketServer.h
class WebSocketServer : public QObject {Q_OBJECT
public:explicit WebSocketServer(quint16 port, QObject *parent = nullptr);~WebSocketServer();private slots:void onNewConnection();void onMessageReceived(const QString &message);private:QWebSocketServer *m_server;QList<QWebSocket *> m_clients;
};// WebSocketServer.cpp
WebSocketServer::WebSocketServer(quint16 port, QObject *parent): QObject(parent), m_server(new QWebSocketServer("UserManager", QWebSocketServer::NonSecureMode, this)) {if (m_server->listen(QHostAddress::Any, port)) {connect(m_server, &QWebSocketServer::newConnection, this, &WebSocketServer::onNewConnection);qDebug() << "WebSocket server started on port" << port;} else {qWarning() << "Failed to start WebSocket server";}
}void WebSocketServer::onNewConnection() {QWebSocket *client = m_server->nextPendingConnection();connect(client, &QWebSocket::textMessageReceived, this, &WebSocketServer::onMessageReceived);m_clients.append(client);qDebug() << "New client connected";
}void WebSocketServer::onMessageReceived(const QString &message) {QWebSocket *client = qobject_cast<QWebSocket *>(sender());if (client) {qDebug() << "Received message:" << message;// 处理消息并返回响应client->sendTextMessage("Message received");}
}
 4.1.2 用户管理界面

在用户和运维人员个人信息管理界面中,使用 QTableView 和 QSqlTableModel 实现用户信息的展示和管理。如下为对用户运维人员个人信息管理的主要逻辑代码段:

// MainWindow.cpp
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);// 初始化 WebSocket 服务器m_webSocketServer = new WebSocketServer(8080, this);// 初始化 SQLite 数据库QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "mainwindow_connection");db.setDatabaseName("user.db");if (!db.open()) {qWarning() << "无法打开数据库";return;}// 初始化表格模型m_model = new QSqlTableModel(this, db);m_model->setTable("users");m_model->select();ui->tableView->setModel(m_model);// 调整列宽和布局ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);// 连接按钮信号槽connect(ui->addButton, &QPushButton::clicked, this, &MainWindow::onAddUser);connect(ui->deleteButton, &QPushButton::clicked, this, &MainWindow::onDeleteUser);connect(ui->updateButton, &QPushButton::clicked, this, &MainWindow::onUpdateUser);connect(ui->refreshButton, &QPushButton::clicked, this, &MainWindow::onRefreshButtonClicked);
}

 4.2 微信小程序端

4.2.1 注册功能

通过 WebSocket 发送注册请求到 Qt 服务端。如下为register,注册逻辑主要实现代码段:

// register.js
Page({data: {username: '',password: '',role: '用户'},onRegister: function () {const { username, password, role } = this.data;const message = JSON.stringify({type: 'register',username,password,role});wx.connectSocket({url: 'ws://192.168.10.100:8080'});wx.onSocketOpen(() => {wx.sendSocketMessage({data: message});});wx.onSocketMessage((res) => {const response = JSON.parse(res.data);if (response.success) {wx.showToast({title: '注册成功',icon: 'success'});} else {wx.showToast({title: response.message,icon: 'none'});}});}
});
 4.2.2 登录功能

通过 WebSocket 发送登录请求到 Qt 服务端。如下为登录login.js的主要逻辑代码段。

// login.js
Page({data: {username: '',password: ''},onLogin: function () {const { username, password } = this.data;const message = JSON.stringify({type: 'login',username,password});wx.connectSocket({url: 'ws://192.168.10.100:8080'});wx.onSocketOpen(() => {wx.sendSocketMessage({data: message});});wx.onSocketMessage((res) => {const response = JSON.parse(res.data);if (response.success) {wx.showToast({title: '登录成功',icon: 'success'});} else {wx.showToast({title: response.message,icon: 'none'});}});}
});

五. 运行效果

首先完成对Linux端编写的Qt服务端代码经过交叉编译后通过scp命令挂载到ip为192.168.10.50的IMX6ULL嵌入式设备上,如下:

确保挂成功:

随后在微信小程序端进行用户的注册:

 同时在注册成功时通过WebSocket将个人数据写入到服务端的数据库中:

 注册成功后跳转到登陆界面,在登陆成功后跳转到用户界面:

对于运维人员的注册于登录亦是如此。 

六. 源码下载

Qt端源码Qt_Server,微信小程序端源码QtApp_demo2,源码已上传至我的gitee代码仓库,有需要请自取:

https://gitee.com/liu-jixwa/mytest

相关文章:

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…...

43.日常算法

1.LCR 142. 训练计划 IV 题目来源 给定两个以 有序链表 形式记录的训练计划 l1、l2&#xff0c;分别记录了两套核心肌群训练项目编号&#xff0c;请合并这两个训练计划&#xff0c;按训练项目编号 升序 记录于链表并返回。 注意&#xff1a;新链表是通过拼接给定的两个链表的…...

策略+适配器模式详解

文章目录 1.策略模式1.目录结构2.Strategy.java 策略接口3.StrategyA.java 策略A4.StrategyB.java 策略B5.StrategyC.java 策略C6.Context.java 策略上下文7.Client.java 客户端8.小结 2.适配器模式1.目录结构2.CustomPaymentProcessor.java 自己的支付接口3.PayPalPaymentServ…...

2024年职高单招或高考计算机类投档线

问题&#xff1a; 这些学校2024年职高单招或高考计算机类投档线分别是多少 回答&#xff1a; 部分学校2024年职高单招或高考计算机类投档线如下&#xff1a; 湖南工业职业技术学院 职高单招&#xff1a;未查询到2024年职高单招计算机类专业明确的录取分数线信息。但在2024年…...

Salesforce 检索Layout的设定

做了许多Object&#xff0c;却想不起来怎么设置我的Listview的项目了。 問題&#xff1a; salesforce 最近参照したオブジェクト 表示項目を変更したいですが、「検索レイアウト」の選択メニューが該当オブジェクトのオブジェクトマネージャーから出てないです。 解決方法&am…...

未来游戏:当人工智能重构虚拟世界的底层逻辑

未来游戏&#xff1a;当人工智能重构虚拟世界的底层逻辑 在《赛博朋克2077》夜之城的霓虹灯下&#xff0c;玩家或许已经注意到酒吧里NPC开始出现微表情变化&#xff1b;在《艾尔登法环》的开放世界中&#xff0c;敌人的战术包抄逐渐显露出类人智慧。这些细节预示着游戏产业正站…...

Zabbix——Rocky9安装zabbix相关步骤记录

安装Zabbix 安装MariaDB 这里用MariaDB演示 https://mariadb.org/download/?trepo-config&dRedHatEnterpriseLinux9&v10.11&r_mneusoft 通过这个网址获得连接 选择对应的repo 根据系统版本和要安装的版本选择对应的repo 安装 新建一个repo文件&#xff0c;例…...

SECS/GEM300应用案例参考

GEM300 是一种用于半导体制造领域的通信协议标准&#xff0c;主要用于支持 300mm 晶圆制造的自动化生产。以下是 GEM300 的一些具体应用案例&#xff1a; 1. 半导体设备集成 设备制造商的应用&#xff1a;广州金南瓜科技有限公司通过 GEM300 SDK&#xff0c;帮助国内多个半导体…...

startai产品精修教程

1.把产品放置ps画布中 打开startai插件选择产品精修功能&#xff0c;选择金属材质即可哦 调节一下参数就可以啦&#xff0c;最终效果图 下载地址&#xff1a;StartAI画图软件官网_PS插件StartAI绘画软件生成器_Photoshop图像处理插件...

【YOLOv8】

文章目录 1、yolov8 介绍2、创新点3、模型结构设计3.1、backbone3.2、head 4、正负样本匹配策略5、Loss6、Data Augmentation7、训练、推理8、分割 Demo附录——V1~V8附录——相关应用参考 1、yolov8 介绍 YOLOv8 是 ultralytics 公司在 2023 年 1 月 10 号开源的 YOLOv5 的下…...

【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库

一、总体方案 目前在使用 DeepSeek 在线环境时&#xff0c;页面经常显示“服务器繁忙&#xff0c;请稍后再试”&#xff0c;以 DeepSeek R1 现在的火爆程度&#xff0c;这个状况可能还会持续一段时间&#xff0c;所以这里给大家提供了 DeepSeek R1 RAG 的本地部署方案。最后实现…...

Oracle视图(基本使用)

视图 视图是通过定制的方式显示一个或者多个表的数据。 视图可以视为“虚拟表”或“存储的查询”。 视图的优点&#xff1a; 提供了另外一种级别的表安全性隐藏了数据的复杂性简化了用户的SQL命令隔离基表结构的改变通过重命名列&#xff0c;从另一个角度提供数据。 视图里…...

梁文锋亲自挂名DeepSeek发布新论文

由 DeepSeek 联合创始人梁文锋亲自挂名的研究团队&#xff0c;在 arXiv 上发表了一篇题为“Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention”的论文&#xff0c;提出了一种全新的注意力机制架构 NSA&#xff08;Native Sparse Attention&…...

低代码(Low Code)全解析:从概念到应用,从选择到价值

​在数字化浪潮席卷全球的当下&#xff0c;企业对软件开发的效率与灵活性愈发重视&#xff0c;低代码平台应运而生并迅速掀起技术热潮。 本文基于笔者 6 年的低代码实践经验&#xff0c;深入剖析低代码的诸多方面&#xff0c;涵盖其定义、发展历程、国内平台对比、开发流程、与…...

C++--STL库-List

目录 1.list 的基本使用 1.1 创建和初始化 1.2. 插入元素 1.3. 删除元素 1.4. 访问元素 1.5 遍历 1.6 总结 list是C标准库&#xff08;STL&#xff09;中的双向链表容器&#xff0c;属于<list>头文件。 它的特点是&#xff1a; 动态大小&#xff1a;可以随时插入…...

尚硅谷 java 学习Day19 抽象类与抽象方法、接口、内部类

6-5 抽象类(abstract)与抽象方法&#xff08;important&#xff09; 一、什么叫抽象类&#xff1a; 有时候将一个父类设计的非常抽象&#xff0c;以至于它没有具体的实例&#xff0c;这样的类称为抽象类 abstract关键字的使用&#xff1a; ​ 1、abstract:抽象的 ​ 2、abs…...

HomeAssistant 发现MQTT设备(温度,湿度,开关)

要通过 MQTT 将温度、湿度数据以及一个灯的开关状态传输到 Home Assistant 并实现设备自动发现&#xff0c;可以按照以下步骤操作&#xff1a; 1.前期准备工作 安装MQTT服务器(EMQX)配置好(可以在HA加载项中安装,也可以在NAS上Docker安装) HA的集成中安装MQTT,并且连接上(EM…...

本地DeepSeek模型GGUF文件转换为PyTorch格式

接前文,我们在本地Windows系统上,基于GGUF文件部署了DeepSeek模型(DeepSeek-R1-Distill-Qwen-1.5B.gguf版本),但是GGUF是已经量化的版本,我们除了对其进行微调之外,无法对其训练,那么还有没有其他办法对本地的GGUF部署的DeepSeek模型进行训练呢?今天我们就反其道而行之…...

手写数字识别的神经网络 2层神经网络的类 代码详解

源代码和图解来自鱼书 目录 2层神经网络的类 源代码&#xff1a; 详解&#xff1a; 1. 类的初始化 (__init__) 2. 前向传播 (predict) 3. 损失函数 (loss) 4. 准确率计算 (accuracy) 5. 数值梯度计算 (numerical_gradient) 6. 反向传播计算梯度 (gradient) 总结&#…...

【项目】基于STM32F103C8T6的四足爬行机器人设计与实现(源码工程)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【项目】基于STM32F103C8T6的四足爬行机器人设计与…...

[代码调试]安装Text2Image(stable diffusion)模型环境的踩坑记录

文章目录 一、xFormers版本问题1、先确认下自己torch版本所对应的cuda版本2.安装对应版本(1) 到对应官网下载包本地安装(2)代码安装 二、attn_mask尺寸错误三、diffusers四、Huggingface 配置基于stable diffusion预训练模型的环境&#xff0c;记录踩坑记录 一、xFormers版本问…...

使用DeepSeek+本地知识库,尝试从0到1搭建高度定制化工作流(自动化篇)

7.5. 配图生成 目的&#xff1a;由于小红书发布文章要求图文格式&#xff0c;因此在生成文案的基础上&#xff0c;我们还需要生成图文搭配文案进行发布。 原实现思路&#xff1a; 起初我打算使用deepseek的文生图模型Janus进行本地部署生成&#xff0c;参考博客&#xff1a;De…...

理解三种哈希算法:MD5、CRC、SHA256

0、背景 哈希算法是一类重要的算法&#xff0c;用于将任意长度的数据映射为固定长度的哈希值。哈希算法广泛应用于数据完整性校验、密码学、数字签名等领域。本文将详细介绍三种常见的哈希算法&#xff1a;MD5、CRC 和 SHA256&#xff0c;并探讨它们的原理、特点及应用场景。 …...

机器学习基本篇

文章目录 1 基本概念2 基本流程2.0 数据获取2.1 预处理2.1.0 认识数据认识问题2.1.1 不平衡标签的处理a.随机过采样方法 ROS,random over-samplingb. SMOTE synthetic minority Over-Sampling Technique2.2 缺失值处理2.3 数据清洗2.3.0离散特征编码2.3.1 连续特征处理归一化标…...

#渗透测试#批量漏洞挖掘#Apache Log4j反序列化命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Apache Log4j反序列化命令执行漏洞 一、…...

python常用库整理

Python常用库众多&#xff0c;涵盖了数据分析、科学计算、机器学习、Web开发、游戏开发、自然语言处理、图像处理、自动化测试等多个领域。以下是一些常用的Python库及其主要用途&#xff1a; 数据分析与科学计算 NumPy&#xff1a;用于科学计算的基础库&#xff0c;支持大型…...

SQL数据处理函数全解析

1. 引言 1.1 SQL简介 SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。它允许用户查询、插入、更新和删除数据库中的数据。SQL的强大之处在于其内置的函数库,这些函数可以帮助我们更高效地处理数据。 1.2 数据处理函数的重要性 数据处理函数在S…...

Python解决“反应物浓度”问题

Python解决“反应物浓度”问题 问题描述测试样例解题思路代码 问题描述 在一个神秘的实验室里&#xff0c;科学家小Z正在研究一种特殊的化学反应。她有一个名为 reactant 的初始物质&#xff0c;其起始值为 0。为了推动实验进展&#xff0c;小Z设计了一系列操作&#xff0c;这…...

HTTP FTP SMTP TELNET 应用协议

1. 标准和非标准的应用协议 标准应用协议&#xff1a; 由标准化组织&#xff08;如 IETF&#xff0c;Internet Engineering Task Force&#xff09;制定和维护&#xff0c;具有广泛的通用性和互操作性。这些协议遵循严格的规范和标准&#xff0c;不同的实现之间可以很好地进行…...

百度搜索全面接入DeepSeek-R1满血版:AI与搜索的全新融合

不等了&#xff0c;就是现在&#xff01;百度搜索全量接入DeepSeek-R1满血版 百度搜索已正式全量接入DeepSeek-R1满血版&#xff0c;在宣布“将接入”仅过了24小时后。 就在宣布“将接入”仅24小时后&#xff0c;百度搜索 已正式全量接入 DeepSeek-R1满血版&#xff01;得益于…...