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

李臻20242817_安全文件传输系统项目报告_第12周

安全文件传输系统项目报告(第 9 周)

1. 代码链接

Gitee 仓库地址:https://gitee.com/li-zhen1215/homework/tree/master/Secure-file

代码结构说明:

project-root/├── src/ # 源代码目录│ ├── main.c # 主程序入口│ ├── db/ # 数据库操作│ ├── gui/ # 图形界面│ └── utils/ # 工具函数模块├── include/ # 头文件├── lib/ # 动态库静态库├── docs/ # 文档目录├── Makefile # 自动编译└── README.md # 项目说明

1、完成用户登录注册界面

  • 注册功能
    用户首次进行注册时,会显示注册成功信息
    在这里插入图片描述

在这里插入图片描述
当用户名存在时,系统会提示注册失败,当前用户已存在。
在这里插入图片描述

  • 登录功能
    输入注册成功的用户名密码,和数据库中的数据匹配后会显示登录成功。
    在这里插入图片描述
    数据库文件在项目的Debug文件中
    在这里插入图片描述
    由于使用的是SQlite,不需要安装和配置服务器。SQLite 是一个嵌入式数据库,它直接将数据库存储在一个单独的磁盘文件中,不需要运行独立的服务器进程。

database.h

#ifndef DATABASE_H
#define DATABASE_H#include <QString>
#include <QSqlDatabase>class Database {
public:static Database& instance();bool registerUser(const QString &username, const QString &password);bool verifyUser(const QString &username, const QString &password);private:Database();QSqlDatabase db;
};#endif // DATABASE_H

database.cpp

#include "database.h"
#include <QSqlQuery>
#include <QSqlError>
#include <QVariant>
#include <QDebug>Database::Database() {db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("user.db");if (!db.open()) {qDebug() << "无法打开数据库:" << db.lastError();}QSqlQuery query;query.exec("CREATE TABLE IF NOT EXISTS users (""id INTEGER PRIMARY KEY AUTOINCREMENT, ""username TEXT UNIQUE, ""password TEXT)");
}Database& Database::instance() {static Database instance;return instance;
}bool Database::registerUser(const QString &username, const QString &password) {QSqlQuery query;query.prepare("INSERT INTO users (username, password) VALUES (?, ?)");query.addBindValue(username);query.addBindValue(password);return query.exec();
}bool Database::verifyUser(const QString &username, const QString &password) {QSqlQuery query;query.prepare("SELECT * FROM users WHERE username = ? AND password = ?");query.addBindValue(username);query.addBindValue(password);query.exec();return query.next();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QWidget>
#include <QLineEdit>
#include <QPushButton>class MainWindow : public QWidget {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);private slots:void login();void registerUser();private:QLineEdit *userLineEdit;QLineEdit *passLineEdit;
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "database.h"
#include "mainpage.h"
#include <QVBoxLayout>
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) : QWidget(parent) {userLineEdit = new QLineEdit(this);passLineEdit = new QLineEdit(this);passLineEdit->setEchoMode(QLineEdit::Password);QPushButton *loginBtn = new QPushButton("登录", this);QPushButton *registerBtn = new QPushButton("注册", this);QVBoxLayout *layout = new QVBoxLayout(this);layout->addWidget(userLineEdit);layout->addWidget(passLineEdit);layout->addWidget(loginBtn);layout->addWidget(registerBtn);connect(loginBtn, &QPushButton::clicked, this, &MainWindow::login);connect(registerBtn, &QPushButton::clicked, this, &MainWindow::registerUser);Database::instance();  // 初始化数据库
}void MainWindow::login() {QString username = userLineEdit->text();QString password = passLineEdit->text();if (Database::instance().verifyUser(username, password)) {QMessageBox::information(this, "登录成功", "欢迎," + username);this->hide();MainPage *page = new MainPage();page->show();} else {QMessageBox::warning(this, "登录失败", "用户名或密码错误!");}
}void MainWindow::registerUser() {QString username = userLineEdit->text();QString password = passLineEdit->text();if (Database::instance().registerUser(username, password)) {QMessageBox::information(this, "注册成功", "可以登录了!");} else {QMessageBox::warning(this, "注册失败", "用户名已存在!");}
}

2、用户登录界面

用户登陆成功后,可在主界面进行文件管理,上传或下载文件。
在这里插入图片描述
mainpage.h

#ifndef MAINPAGE_H
#define MAINPAGE_H#include <QWidget>class MainPage : public QWidget {Q_OBJECTpublic:MainPage(QWidget *parent = nullptr);private slots:void uploadFile();void downloadFile();
};#endif // MAINPAGE_H

mainpage.cpp

#include "mainwindow.h"
#include "database.h"
#include "mainpage.h"
#include <QVBoxLayout>
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) : QWidget(parent) {userLineEdit = new QLineEdit(this);passLineEdit = new QLineEdit(this);passLineEdit->setEchoMode(QLineEdit::Password);QPushButton *loginBtn = new QPushButton("登录", this);QPushButton *registerBtn = new QPushButton("注册", this);QVBoxLayout *layout = new QVBoxLayout(this);layout->addWidget(userLineEdit);layout->addWidget(passLineEdit);layout->addWidget(loginBtn);layout->addWidget(registerBtn);connect(loginBtn, &QPushButton::clicked, this, &MainWindow::login);connect(registerBtn, &QPushButton::clicked, this, &MainWindow::registerUser);Database::instance();  // 初始化数据库
}void MainWindow::login() {QString username = userLineEdit->text();QString password = passLineEdit->text();if (Database::instance().verifyUser(username, password)) {QMessageBox::information(this, "登录成功", "欢迎," + username);this->hide();MainPage *page = new MainPage();page->show();} else {QMessageBox::warning(this, "登录失败", "用户名或密码错误!");}
}void MainWindow::registerUser() {QString username = userLineEdit->text();QString password = passLineEdit->text();if (Database::instance().registerUser(username, password)) {QMessageBox::information(this, "注册成功", "可以登录了!");} else {QMessageBox::warning(this, "注册失败", "用户名已存在!");}
}

3、遇到的问题

问题1:识别不到内嵌UI文件

  • 现象:在QT程序中,无法识别内嵌的UI文件,无法启动UI
  • 原因:QT配置资源文件和路径名不匹配
  • 解决:确保UI文件的路径和名称在代码中正确引用。如果使用了资源文件(.qrc),检查资源文件的路径和前缀是否正确。例如,如果资源文件中定义了prefix=“/icons”,则在代码中引用资源时需要使用":/icons/yourfile.png"

问题2:SQlite在Ubuntu中无法使用

  • 现象:sqlite在qt中无法使用
  • 原因:没有加载SQlite插件
  • 解决
    通过下面命令安装插件
sudo apt-get install libqt5sql5-sqlite

在Qt项目文件(.pro文件)中,确保添加了SQL模块:

QT += sql

将qsqlite插件文件复制到应用程序的运行目录或sqldrivers目录下。

cp /path/to/qt/plugins/sqldrivers/libqsqlite.so /path/to/your/application/sqldrivers/

清理并重新构建项目

qmake
make clean
make

5. 提交报告文档要求

Markdown 文档

  • 本报告使用 Markdown 编写,文件名为 姓名学号_项目名称_第 XX 周.md
  • 包含代码块、图片链接、列表等标准语法。

转换为 PDF

  • 工具:使用 VS Code 插件 Markdown PDF 或在线工具 Pandoc。
  • 步骤
    # 命令行转换示例
    pandoc project-report.md -o project-report.pdf --pdf-engine=xelatex
    

相关文章:

李臻20242817_安全文件传输系统项目报告_第12周

安全文件传输系统项目报告&#xff08;第 9 周&#xff09; 1. 代码链接 Gitee 仓库地址&#xff1a;https://gitee.com/li-zhen1215/homework/tree/master/Secure-file 代码结构说明&#xff1a; project-root/├── src/ # 源代码目录│ ├── main.c # 主程序入口│ ├…...

19-I2C库函数

一、IIC配置流程 IIC配置流程需要添加的库函数&#xff1a;stm32f4xx_i2c.c 1、理解电路原理图 SCL --- PB8 SDA -- PB9 使用I2C1 2、配置I2C库函数的步骤 &#xff08;1&#xff09;使能GPIOB组时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);&#xff08;2…...

minicom串口调试助手

sudo apt-get install minicom 配置 sudo minicom -s 然后用方向键向下移动到“Serial port setup”&#xff0c;回车 按键盘“A”把串口的映射文件名输入。 按键盘“E”可以修改波特率 按键盘“F”把硬件流关闭&#xff0c;否则minicom可能无法接收键盘输入。 配置好后&…...

扫描件交叉合并PDF免费软件 拖拽即合并 + 自动对齐页码 档案整合更轻松

各位办公小能手们&#xff01;我跟你们说啊&#xff0c;今天要给你们介绍个超厉害的工具&#xff0c;叫PDFCrossMerge。这玩意儿就像一个神奇的文档小魔法师&#xff0c;专门搞PDF扫描件交叉合并的事儿&#xff0c;能解决单面扫描文件正反面页码顺序的大难题。 先说说它的核心…...

atcoder C - ~

https://atcoder.jp/contests/abc406/tasks/abc406_c 题目简述&#xff1a; 给定一个序列p&#xff0c;让你求出p的所有子序列中波浪形序列的个数 波浪形序列的定义&#xff1a;1&#xff1a;长度>4&#xff1b;2&#xff1a;仅存在一个波峰和波谷&#xff1b;3&#xff1…...

PCB设计实践(十八)PCB设计铜厚选择及分层设计深度解析

PCB铜箔厚度作为电路板设计的核心参数之一&#xff0c;直接影响电路性能、可靠性及成本。本文将从铜厚选择的六大核心要素、多层板分层设计的策略、制造工艺的耦合关系三大维度&#xff0c;系统性解析PCB铜厚设计的工程方法论&#xff0c;并结合典型应用场景提供决策框架。 一、…...

React 19中如何向Vue那样自定义状态和方法暴露给父组件。

文章目录 前言一、什么是 useImperativeHandle&#xff1f;1.1 为什么需要 useImperativeHandle&#xff1f;1.2 基本语法 二、useImperativeHandle 的常见用法3.1 暴露自定义方法3.2子组件封装的弹窗关闭方法暴露给外部 注意点&#xff1a;总结 前言 在 React 的函数组件中&a…...

【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现

【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现 高性能网络学习目录 基础内容&#xff08;两周完成&#xff09;&#xff1a; 2.1网络编程 2.1.1多路复用select/poll/epoll2.1.2事件驱动reactor2.1.3http服务器的实现 2.2网络原理 百万并发PosixAPIQUIC 2.3协程库…...

1.5 MouseDown,MouseUp,LostMouseCapture的先后顺序

本文目标是实现如下功能: 按下一个按钮后置位某变量;鼠标松开后复位某个变量? 看似简单,但是一般来说会存在如下两种现象: 鼠标移出按钮:默认会丢失鼠标事件跟踪,即MouseLeftButtonUp事件并不会被触发。 焦点切换:Tab 键切换焦点会干扰按钮的事件捕获 本文通过几个…...

备战!全国青少年信息素养大赛图形化编程-省赛——求最小公倍数

备战&#xff01;全国青少年信息素养大赛图形化编程-省赛——求最小公倍数 题目可点下方去处&#xff0c;支持在线编程~ 求最小公倍数_scratch_少儿编程题库学习中心-嗨信奥 程序演示可点击下方去处&#xff0c;支持源码和素材获取~ 求最小公倍数-scratch作品-少儿编程题库学习…...

Vue3进行工程化项目,保姆级教学(编译软件:vscode)大部分编译平台适用

目录 1. 创建vue工程 1.1 第一步 1.2 选择名称和工件 1.3 选择语言 1.4 自动下载js 1.5 运行vue工程 1.6 成功页面 2. 更改vue工程安装的位置 3. 更改运行工程方式 第一步 第二步 ​编辑 第三步 调试 ​编辑 运行项目 前面所学都是vue3的基础&#xff0c;为了简…...

通过觅思文档项目实现Obsidian文章浏览器在线访问

觅思文档项目开源地址 觅思文档项目开源地址&#xff1a;https://gitee.com/zmister/MrDoc 觅思文档部署步骤概览 服务器拉取代码&#xff1a; git clone https://gitee.com/zmister/mrdoc-install.git && cd mrdoc-install && chmod x docker-install.sh &a…...

⭐️白嫖的阿里云认证⭐️ 第二弹【课时1:提示词(Prompt)技巧】for 「大模型Clouder认证:利用大模型提升内容生产能力」

「大模型Clouder认证:利用大模型提升内容生产能力」这个认证目前在阿里云认证中心还是免费的,简单几步就可以申请考试,有两次的免费考试机会。而且,这个课程中的内容对于所有普通用户来说都非常实用,课程整体长度也就3节课,非常快速就能学完。心动不如行动,赶紧开始吧!…...

零基础搭建!基于PP-ShiTuV2的轻量级图像识别系统(Docker+API部署指南)

以下是对该图像分类识别系统的的简单介绍&#xff1a; PP-ShiTuV2 是一个由百度飞桨团队发布的实用轻量级通用图像识别系统&#xff0c;由主体检测、特征提取、向量检索三个模块构成&#xff0c;适用于快速构建轻量级、高精度、可落地的图像识别应用image_classification是一个…...

阿克曼-幻宇机器人系列教程4- 建图

在之前的文章中&#xff0c;我们介绍了如何登录机器人&#xff0c;如何实现上位机与下位机之间的互通&#xff0c;还介绍了机器人的topic和message&#xff0c;以及如何通过命令行对topic、message进行对应的操作。 接下来&#xff0c;我们就要运用前面所学的所有知识进行综合…...

【方法论】如何构建金字塔框架

文章目录 一、自上而下法1、5步法2、案例说明&#xff1a;基于自上而下法构建金字塔结构来优化写作逻辑 二、自下而上法1、 自下而上法的“三步走”策略步骤1&#xff1a;列出所有思想要点步骤2&#xff1a;找出逻辑关系&#xff08;因果或共性&#xff09;步骤3&#xff1a;得…...

Ubuntu 18.04设置静态IP的方法(图形化操作)

0 前言 当路由器启用了DHCP功能&#xff0c;每次启动虚拟机下的Ubuntu&#xff08;网络连接模式为桥接模式&#xff09;分配到的IP可能是不一样的&#xff0c;不方便使用和调试&#xff08;例如开发板加载镜像的主机IP地址也要跟着更改&#xff09;。针对这些问题&#xff0c;…...

第12章 Java多线程机制

12.1 进程与线程 4种状态&#xff1a;新建、运行、中断和死亡。 &#xff08;新建、运行、中断和死亡&#xff09; 建立线程的两种方法&#xff1a;用Thread类或其子类。 线程新建后&#xff0c;必须调用 start () 方法使其进入就绪队列&#xff0c;才有机会获得 CPU 资源&a…...

AM32电调学习解读八:无感驱动相位波形解析

这是第八篇&#xff0c;本篇主要是解读换相波形&#xff0c;方便理解代码。 1、无感驱动波形图 1&#xff09;ESC简图 2&#xff09;比较器接线图 灵动微 BLDC 电机方波控制中的反电动势过零检测介绍 - 大大通(简体站) 3&#xff09;未满duty波形 未满duty方便看出是高边驱…...

封装、继承、多态的理解

目录 1、封装 2、继承 3、多态 4、举例&#xff1a;计算机和外设 1、封装 封装是从使用者的角度&#xff0c;将某种复杂的事务&#xff0c;打包成一个整体&#xff0c;只对使用者提供方便使用的方式。 举例&#xff1a; 1> 胶囊&#xff1a;对于各种混合药物的封装 …...

使用vscode做python项目fastapi的开发

准备工作 安装必要软件 Python&#xff1a;确保安装 Python 3.8 或更高版本&#xff08;FastAPI 推荐&#xff09;。下载地址&#xff1a;https://www.python.org/downloads/ 验证安装&#xff1a; bash python --versionVS Code&#xff1a;下载并安装 VS Code&#xff1a;ht…...

多指标组合策略思路

一种基于多种技术指标和日历因素的综合交易策略&#xff0c;旨在通过复杂的条件判断来预测市场的短期走势&#xff0c;并据此进行买卖操作。 策略概述 该策略的核心思想是通过结合多个技术指标和日历因素来判断市场的短期趋势&#xff0c;并在合适的时机进行买入或卖出操作。 具…...

day29 python深入探索类装饰器

目录 一、类装饰器的初步理解 二、类装饰器与函数装饰器的对比 三、类装饰器的实现与应用 &#xff08;一&#xff09;为类添加日志功能 &#xff08;二&#xff09;动态方法绑定的两种方式 四、手动调用装饰器&#xff1a;类的“后天改造” 五、总结与展望 一、类装饰器…...

Rstudio换皮:自定义彩虹括号与缩进线

更换主题 Rstudio还是R语言最好用的IDE&#xff0c;默认的Rstudio已经自带了很多主题&#xff0c;可以自由选择。 更换内置主题 • 操作路径&#xff1a;Tools → Global Options → Appearance 在Editor Theme选项中切换主题&#xff0c;默认使用Textmate主题。RStudio提供…...

基于springboot+vue的车票管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 用户管理 班次时…...

计算机组成与体系结构:Snooping-Based Protocols(监听式协议)

目录 什么是监听式协议&#xff1f; Snooping 的总线模型 两种写策略&#xff1a;Write Update vs. Write Invalidate 1️⃣ Write-Invalidate&#xff08;写失效&#xff09; 2️⃣ Write-Update&#xff08;写更新&#xff09; &#x1f50d; 操作流程分析 &#x1f5…...

CSS 浮动(Float)及其应用

1. 什么是浮动&#xff08;Float&#xff09;&#xff1f; 浮动元素会脱离正常的文档流&#xff08;Document Flow&#xff09;&#xff0c;并向左或向右移动&#xff0c;直到碰到父元素的边缘或另一个浮动元素。 基本语法 .float-left {float: left; }.float-right {float:…...

离散文本表示

目录 一、离散文本表示的底层逻辑 二、One-hot 编码 &#xff08;一&#xff09;One-hot 编码的精妙机制 &#xff08;二&#xff09;One-hot 编码的优势与局限 三、词袋法&#xff08;Bag of Words&#xff09; &#xff08;一&#xff09;词袋法的核心思想 &#xff08…...

Python异常处理与OOP深度解析及实战案例

**导读&#xff1a;**在现代软件开发中&#xff0c;异常处理与面向对象编程&#xff08;OOP&#xff09;是构建健壮、可维护程序的两大基石。本文深入解析了 Python 中的异常处理机制和 OOP 编程的核心概念&#xff0c;并通过实战案例帮助你掌握这些技术的实际应用。 文章从异常…...

KnowCard:我的知识卡片生成器是怎么炼成的?

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念&#xff1a;我想做个“笔记神器” 有时候&#xff0c;看着笔记本里密密麻麻的学习要点&#xff0c;我…...

JAVA EE(进阶)_进阶的开端

别放弃浸透泪水的昨天&#xff0c;晨光已为明天掀开新篇 ——陳長生. ❀主页&#xff1a;陳長生.-CSDN博客❀ &#x1f4d5;上一篇&#xff1a;JAVA EE_HTTP-CSDN博客 1.什么是Java EE Java EE&#xff08;Java Pla…...

装甲PPT习题

装甲PPT习题 第一章 将 42.195 42.195 42.195&#xff0c; 0.0375551 0.0375551 0.0375551&#xff0c; 8.00033 8.00033 8.00033&#xff0c; 2.71828 2.71828 2.71828 按四舍五入写出上述各数具有四位有效数字的近似数。 考察三位有效数字重力加速度 g g g&#xff0c;若…...

EasyExcel动态表头

专家官方解答 &#xff1a; 在使用EasyExcel处理Excel动态表头的问题时&#xff0c;官方并不推荐使用includecolumnfieldnames方法。根据提供的知识内容&#xff0c;以下是如何实现动态表头的详细步骤和解释&#xff1a; 原因分析 动态表头的需求通常来源于希望根据用户的选…...

LoadBarWorks:一款赛博风加载动画生成器的构建旅程

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 项目缘起&#xff1a;赛博与实用的结合 在日常开发中&#xff0c;我经常需要为不同的项目添加加载动画&#x…...

跨平台多用户环境下PDF表单“序列号生成的服务器端方案“

在PDF表单处理中&#xff0c;经常需要为每个表单生成唯一的序列号或表单编号。当所有表单都在同一台计算机上由同一用户处理时&#xff0c;可以通过JavaScript将编号存储在另一个表单或全局JavaScript数据中来实现。然而&#xff0c;当需要在多台计算机或多个用户环境中使用时&…...

二:操作系统之进程控制块(PCB)

进程的身份证与状态记录&#xff1a;深入理解进程控制块 (PCB) 在我们之前的博客中&#xff0c;我们探讨了进程是什么——程序的一次执行实例&#xff0c;以及进程在其生命周期中会经历的各种状态&#xff08;新建、就绪、运行、等待、终止&#xff09;。我们知道&#xff0c;…...

创建型:原型模式

目录 1、核心思想 2、实现方式 2.1 基本结构 2.2 代码示例&#xff08;Java&#xff09; 3、适用场景 4、new与clone实际场景建议 1、核心思想 目的&#xff1a;通过复制&#xff08;克隆&#xff09;现有对象来创建新对象&#xff0c;而不是通过new关键字实例化。对于那…...

从c++到python

从c到python 前言printprint格式化print按原始格式输出 input变量、常量和数据类型整型和type()浮点型复数字符串类型数据类型转换变量地址 注释关键字容器列表list下标索引常用功能 元组tuple字符串str字符串的成员函数&#xff1a;字符串初始化为几个固定字符字符和int型数据…...

仿腾讯会议——房间界面用户设置

1、房间界面设置 2、 添加新设计师界面类 3、设置用户设置 4、添加新类&&设置房间标题 5、设置控件 6、修改用户展示头文件 7、 设置用户名 8、客户端添加用户展示 9、测试数据 10、成功截图...

Vue+Go 自定义打字素材的打字网站

Typing_Key_Board 这是一个基于Vue 3和Go语言的自定义素材打字练习网站&#xff0c;灵感来源于常用字打字练习&#xff0c;解决了大多数网站无法自定义打字素材的问题。在 Typing_Key_Board (简称TKB)中&#xff0c;用户可以自定义打字素材进行练习&#xff0c;在复习代码的同…...

生产级编排AI工作流套件:Flyte全面使用指南 — Data input/output

生产级编排AI工作流套件&#xff1a;Flyte全面使用指南 — Data input/output Flyte 是一个开源编排器&#xff0c;用于构建生产级数据和机器学习流水线。它以 Kubernetes 作为底层平台&#xff0c;注重可扩展性和可重复性。借助 Flyte&#xff0c;用户团队可以使用 Python SDK…...

JUC入门(二)

5、8锁现象&#xff1a;就是关于锁的八个问题 谁来充当锁&#xff1f;要锁的是什么东西&#xff1f;这个锁有什么用&#xff1f; 其实锁的作用就是&#xff1a;哪个线程先拿到锁&#xff0c;谁就有先执行同步方法的权力 那么谁能充当锁&#xff1f;任何对象都可以充当锁 要…...

深入浅出:CPU寻址方式完全指南(从理论到实践)

引言&#xff1a;为什么需要寻址方式&#xff1f; 当我们写下一行高级语言代码&#xff08;比如 int sum a b;&#xff09;&#xff0c;计算机底层是如何找到变量 a 和 b 的&#xff1f; 寻址方式&#xff08;Addressing Modes&#xff09; 就是 CPU 定位操作数的策略&#…...

PyQt5基本窗口控件(对话框类控件)

对话框类控件 QDialog 为了更好地实现人机交互&#xff0c;比如Windows及Linux等系统均会提供一系列的标 准对话框来完成特定场景下的功能&#xff0c;如选择字号大小、字体颜色等。在PyQt5中定 义了一系列的标准对话框类&#xff0c;让使用者能够方便和快捷地通过各个类完成…...

【PostgreSQL系列】PostgreSQL 复制参数详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

给easyui的textbox绑定回车事件

项目有一个textbox输入框&#xff0c;需要绑定一个回车搜索事件。 一开始想着&#xff0c;直接使用js的on或者jquery的keydown方法直接绑定&#xff0c;但是事件不生效。 $("#propName").textbox({width: 200,prompt: "请输入物品名称进行搜索" }).keydo…...

量子计算 | 量子密码学的挑战和机遇

量子计算在密码学中的应用现主要体现在对现有加密算法的威胁上。最著名的例子是Shor算法&#xff0c;该算法能够在多项式时间内分解大整数&#xff0c;从而威胁到基于大数分解的加密算法&#xff0c;如RSA加密。此外&#xff0c;量子计算还可以加速某些类型的密码分析&#xff…...

什么是着色器 Shader

本人就是图形学结课了&#xff0c;对 OpenGL着色器还有很多疑问嘿嘿 文章目录 为什么要有着色器vshaderfshader 本文围绕 vshader 和 fshader 代码示例讲解。 &#xff08;着色器代码取自本人简单OpenGL项目 https://github.com/DBWGLX/-OpenGL-3D-Lighting-and-Shadow-Modeli…...

STM32H562----------启动时钟分析

1、H562启动过程分析 1.1、启动模式 复位方式有三种:上电复位、硬件复位和软件复位。当产生复位后,离开复位状态后 CM33 内核做的第一件事就是 读取堆栈指针 MSP 的初始值及程序计数器指针 PC 的初始值: 1、从地址 0x0000 0000 处读取出堆栈指针 MSP 的初始值,该值即栈…...

MIT 6.S081 2020 Lab4 traps 个人全流程

零、写在前面 做之前可以看看Chapter 4&#xff1a;Traps and systems calls&#xff0c;了解XV6 下的陷入机制 https://pdos.csail.mit.edu/6.828/2020/xv6/book-riscv-rev1.pdf 这个实验旨在探索系统调用如何实现了trap&#xff0c;会先做一个有关栈的练习&#xff0c;然后…...