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

基于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 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…...

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中&#xff0c;外部中断是一个非常重要的功能&#xff0c;它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能&#xff1a;一种是在…...

HTML之JavaScript使用JSON

HTML之JavaScript使用JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。JSON是JavaScript对象的字符串表示法&#xff0c;它使用文本表示一个js对象的信息&#xff0c;可以将json字符串转换…...

算法很美笔记(Java)——树

性质 树 上面的性质因为两个结点由一条边连成 结点数目越多&#xff0c;算法复杂度越高 二叉树 结构 层次遍历 利用队列&#xff0c;弹一个&#xff0c;加N个&#xff08;队列里弹出一个元素&#xff0c;就把这个元素的所有孩子加进去&#xff09; 具体来说&#xff1a;指…...

SQL面试题4:相互关注问题

引言 在社交媒体和各类社区平台蓬勃发展的当下&#xff0c;用户之间的关系网络成为了平台运营和数据分析的关键部分。相互关注作为一种重要的社交关系&#xff0c;不仅反映了用户之间的紧密程度&#xff0c;还对平台的社交生态、内容传播等方面有着深远影响。本文将聚焦于 SQL…...

ArcGIS基础知识之ArcMap基础设置——ArcMap选项:常规选项卡设置及作用

作为一名 GIS 从业者,ArcMap 是我们日常工作中不可或缺的工具。对于初学者来说,掌握 ArcMap 的基础设置是迈向 GIS 分析与制图的第一步。今天,就让我们一起深入了解 ArcMap 选项中常规选项卡的各个设置,帮助大家更好地使用这款强大的软件。 在 ArcMap 中,常规选项卡是用户…...

jvm 线程监控调试

文章目录 前言一、使用JDK工具转储线程文件(如jstack)1. 找到Java进程的PID:2. 使用jstack生成线程转储文件:3.验证生成的线程转储文件:二、分析文件1.使用在线工具进行分析上传thread-dump文件,等待解析完成2.查看分析结果总结前言 提示:使用jdk自带工具转储线程监控文…...

25、深度学习-自学之路-卷积神经网络基于MNIST数据集的程序展示

import keras #添加Keraskuimport sys,numpy as np from keras.utils import np_utilsimport osfrom keras.datasets import mnist print("licheng&#xff1a;""20"\n) np.random.seed(1)(x_train,y_train),(x_test,y_test) mnist.load_data() #第一次…...

【C++】解锁<list>的正确姿势

> &#x1f343; 本系列为初阶C的内容&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:[小编的个人主页])小编的个人主页 > &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 > ✌️ &#x1f91e; &#x1…...

Qt中的事件

写一个 可以拖动的按钮 DraggablePushButton.h 头文件 #ifndef DRAGGABLEPUSHBUTTON_H #define DRAGGABLEPUSHBUTTON_H#include <QPushButton> #include <QMouseEvent>class DraggablePushButton : public QPushButton {Q_OBJECTpublic:explicit DraggablePushBu…...

变化检测相关论文可读list

一些用得上的&#xff1a; 遥感变化检测常见数据集https://github.com/rsdler/Remote-Sensing-Change-Detection-Dataset/ 代码解读&#xff1a;代码解读 | 极简代码遥感语义分割&#xff0c;结合GDAL从零实现&#xff0c;以U-Net和建筑物提取为例 NeurIPS2024: https://mp.w…...

Ansible中playbook的变量

变量 playbook的变量有以下几种 在playbook中用户自定义的变量远程主机中由Ansible收集的变量在文件模板中使用的上述两种变量把任务结果作为一个变量使用&#xff0c;叫注册变量用户在执行playbook时&#xff0c;通过命令行传入的变量&#xff0c;叫做额外变量 在playbook中…...

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略&#xff0c;早在2024年5月&#xff0c;推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体&#xff0c;为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来&#xff0c;亚信安全人工智能实验室利…...

相似性图相关性重构网络用于无监督跨模态哈希

《Similarity Graph-correlation Reconstruction Network for unsupervised cross-modal hashing》 摘要1. 引言2. 相关工作2.1. 监督跨模态哈希方法2.2. 无监督跨模态哈希方法 3. 方法论3.1 问题定义3.2 特征提取3.3 模态内关系图构建3.4. 局部关系图重置3.5. 跨模态关系图构建…...

【Bug】属性 PackageVersion 应在所有目标框架中具有单个值,但却具有以下值

文章目录 问题问题代码原因解决处理Bug的具体步骤 问题 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) NU1105 无法读取“x”的项目信息: 属性 PackageVersion 应在所有目标框架中具有单个值&#xff0c;但却具有以下值: 1.0.0, 1.0.5 x (net8.0-android), x (net8.…...

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】

文章目录 关于新的问题更好的解决方案Week13Mon Macros阅读材料Lab 11: Programs as Data, MacrosQ1: WWSD: QuasiquoteQ2: If ProgramQ3: Exponential PowersQ4: Repeat Wed SQL阅读材料Disc 11: MacrosQ1: Mystery MacroQ2: Multiple AssignmentQ3: Switch Optional Contest:…...

SSH隧道+Nginx:绿色通道详解(SSH Tunnel+nginx: Green Channel Detailed Explanation)

SSH隧道Nginx&#xff1a;内网资源访问的绿色通道 问题背景 模拟生产环境&#xff0c;使用两层Nginx做反向代理&#xff0c;请求公网IP来访问内网服务器的网站。通过ssh隧道反向代理来实现&#xff0c;重点分析一下nginx反代的基础配置。 实验环境 1、启动内网服务器的tomca…...

LabVIEW用户界面设计原则

在LabVIEW开发中&#xff0c;用户界面&#xff08;UI&#xff09;设计不仅仅是为了美观&#xff0c;它直接关系到用户的操作效率和体验。一个直观、简洁、易于使用的界面能够大大提升软件的可用性&#xff0c;尤其是在复杂的实验或工业应用中。设计良好的UI能够减少操作错误&am…...

Datawhale 数学建模导论二 2025年2月

第6章 数据处理与拟合模型 本章主要涉及到的知识点有&#xff1a; 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论&#xff0c;如果对这部分内容不熟悉&#xff0c;可以参考相关概率论与数理统计的…...

中型零售业数据库抉择:MySQL省成本,SQL SERVER?

针对中型零售企业&#xff08;20台固定POS数十台移动POS&#xff0c;含库存管理与结算业务&#xff09;的操作系统与数据库选型&#xff0c;需平衡性能、成本、扩展性及运维效率。结合行业实践与系统需求&#xff0c;建议如下&#xff1a; &#x1f5a5;️ ​​一、操作系统选型…...

机器学习:集成学习概念和分类、随机森林、Adaboost、GBDT

本文目录&#xff1a; 一、集成学习概念**核心思想&#xff1a;** 二、集成学习分类&#xff08;一&#xff09;Bagging集成&#xff08;二&#xff09;Boosting集成&#xff08;三&#xff09;两种集成方法对比 三、随机森林&#xff08;一&#xff09;构造过程&#xff08;二…...

SQLServer中的存储过程与事务

一、存储过程的概念 1. 定义 存储过程&#xff08;Stored Procedure&#xff09;是一组预编译的 SQL 语句的集合&#xff0c;它们被存储在数据库中&#xff0c;可以通过指定存储过程的名称并执行来调用它们。存储过程可以接受输入参数、输出参数&#xff0c;并且可以返回执行…...

VsCode 安装 Cline 插件并使用免费模型(例如 DeepSeek)

当前时间为 25/6/3&#xff0c;Cline 版本为 3.17.8 点击侧边栏的“扩展”图标 在搜索框中输入“Cline” 找到 Cline 插件&#xff0c;然后点击“安装” 安装完成后&#xff0c;Cline 图标会出现在 VS Code 的侧边栏中 点击 Use your own API key API Provider 选择 OpenRouter…...

k8s下离线搭建elasticsearch

前提 已经完成k8s安装 已经完成相关组件如helm的安装 下载es的chart包 如下地址 https://helm.elastic.co/helm/elasticsearch/elasticsearch-版本号.tgz 如6.8.10 https://helm.elastic.co/helm/elasticsearch/elasticsearch-6.8.10.tgz 修改配置 修改value.yaml文件…...

Ubuntu22.04 安装 Miniconda3

Conda 是一个开源的包管理系统和环境管理系统&#xff0c;可用于 Python 环境管理。 Miniconda 是一个轻量级的 Conda 发行版。Miniconda 包含了 Conda、Python和一些基本包&#xff0c;是 Anaconda 的精简版本。 1.下载安装脚本 在 conda官网 找到需要的安装版本&#xff0…...

字符串 金额转换

package heima.Test09;import java.util.Scanner;public class Money {public static void main(String[] args) {//1。键盘录入一个金额Scanner sc new Scanner(System.in);//请输入一个数据String result "";int money;while (true) {System.out.println("请…...

BugKu Web渗透之需要管理员

启动场景&#xff0c;打开网页&#xff0c;显示如下&#xff1a; 一般没有上面头绪的时候&#xff0c;就是两步&#xff1a;右键查看源代码 和 扫描网站目录。 步骤一&#xff1a; 右键查看源代码 和 扫描网站目录。 右键查看源代码没有发现异常。 于是扫描网站目录&…...

在 Allegro PCB Editor 中取消(解除或删除)已创建的 **Module** 的操作指南

在 Allegro PCB Editor 中取消&#xff08;解除或删除&#xff09;已创建的 Module 有两种主要场景&#xff0c;操作也不同&#xff1a; &#x1f4cc; 场景一&#xff1a;仅想解除元件与 Module 的关联&#xff08;保留元件位置和布线&#xff0c;但可独立编辑&#xff09; …...

.NET 原生驾驭 AI 新基建实战系列(三):Chroma ── 轻松构建智能应用的向量数据库

在人工智能AI和机器学习ML迅猛发展的今天&#xff0c;数据的存储和检索需求发生了巨大变化。传统的数据库擅长处理结构化数据&#xff0c;但在面对高维向量数据时往往力不从心。向量数据库作为一种新兴技术&#xff0c;专为AI应用设计&#xff0c;能够高效地存储和查询高维向量…...