qt作业day2
1:在注册登录的练习里面,追加一个QListWidget 项目列表 要求:点击注册之后,将账号显示到 listWidget上面去 以及,在listWidget中双击某个账号的时候,将该账号删除
.h
#ifndef WIDGET_H
#define WIDGET_H
#include "QFile"
#include <QWidget>
#include <QListWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);void save_data(const QString &filename,const QString &data);QString load_data(const QString& filename);~Widget();private slots:void on_lineEdit_2_textChanged(const QString &arg1);void on_lineEdit_textChanged(const QString &arg1);void on_pushButton_3_pressed();void on_pushButton_3_released();void on_checkBox_stateChanged(int arg1);void on_pushButton_clicked(); // 注册按钮点击void on_lineEdit_returnPressed(); // 输入框回车void myslot_2(); // 信号示例void loadAccountInfo(); // 加载账号信息void deleteAccount(QListWidgetItem* item); // 删除账号private:Ui::Widget *ui;QFile file;QString accountFilePath; // 账号信息文件路径QList<QString> accounts; // 存储账号信息
};
#endif // WIDGET_H
.cpp
#include "widget.h"
#include "ui_widget.h"
#include "QFile"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QString name = load_data("F:/hqyjian/mm.txt");ui->lineEdit->setText(name);accountFilePath = "F:/hqyjian/mm.txt";// 加载账号信息loadAccountInfo();// 连接信号和槽connect(ui->pushButton, &QPushButton::clicked, this, &Widget::on_pushButton_clicked);connect(ui->lineEdit_2, &QLineEdit::returnPressed, this, &Widget::on_lineEdit_returnPressed);connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &Widget::deleteAccount);
}Widget::~Widget()
{QString name = ui->lineEdit_2->text();QString password = ui->lineEdit->text();save_data("F:/hqyjian/mm.txt",name);save_data("F:/hqyjian/mm.txt",password);delete ui;
}void Widget::save_data(const QString &filename,const QString &data)
{file.setFileName(filename);file.open(QFile::WriteOnly);file.write(data.toLocal8Bit());file.close();
}QString Widget::load_data(const QString &filename)
{file.setFileName(filename);file.open(QFile::ReadOnly);QByteArray arr = file.readAll();QString str = QString::fromLocal8Bit(arr);file.close();return str;
}void Widget::on_lineEdit_2_textChanged(const QString &arg1)
{QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if(name.isEmpty() || pswd.isEmpty()){ui->pushButton->setEnabled(0);ui->pushButton_2->setEnabled(0);}else{ui->pushButton->setEnabled(1);ui->pushButton_2->setEnabled(1);}
}void Widget::on_lineEdit_textChanged(const QString &arg1)
{QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if(name.isEmpty() || pswd.isEmpty()){ui->pushButton->setEnabled(0);ui->pushButton_2->setEnabled(0);}else{ui->pushButton->setEnabled(1);
}
}void Widget::on_pushButton_3_pressed()
{ui->lineEdit->setEchoMode(QLineEdit::Normal);}void Widget::on_pushButton_3_released()
{ui->lineEdit->setEchoMode(QLineEdit::Password);}void Widget::on_checkBox_stateChanged(int arg1)
{}
void Widget::on_pushButton_clicked()
{QString str = ui->lineEdit->text();if (!str.isEmpty()) {accounts.append(str);ui->listWidget->addItem(str); // 添加到 QListWidgetui->textEdit->append(str); // 添加到 QTextEditui->lineEdit->clear();}
}void Widget::on_lineEdit_returnPressed()
{on_pushButton_clicked(); // 回车键触发注册按钮点击事件
}void Widget::myslot_2()
{ui->textEdit->append("dda");
}void Widget::loadAccountInfo()
{QFile file(accountFilePath);if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);while (!in.atEnd()) {QString line = in.readLine();accounts.append(line);ui->listWidget->addItem(line); // 添加到 QListWidgetui->textEdit->append(line); // 添加到 QTextEdit}file.close();}
}void Widget::deleteAccount(QListWidgetItem* item)
{if (item) {QString account = item->text();accounts.removeAll(account);ui->listWidget->removeItemWidget(item);delete item;// 保存更新后的账号信息QFile file(accountFilePath);if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream out(&file);for (const QString& acc : accounts) {out << acc << "\n";}file.close();}}
}
main.cpp
#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
2.完成一个计算器,ui界面如下 完成 +-*/计算功能并且在对应位置显示对应的数据
.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "QString"
#include "QIcon"
#include "math.h"
#include "QPixmap"
#include <QPainter>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();void paintEvent(QPaintEvent *event);
public slots:void push_Botton();void push_Botton1();void push_Botton2();void push_Botton3();void push_Botton4();void push_Botton5();void push_Botton6();void push_Botton7();void push_Botton8();void push_Botton9();void bnt_add();void bnt_sub();void bnt_mul();void bnt_div();void bnt_d();void bnt_over();private slots:void on_clear_clicked(bool checked);void on_clearall_clicked(bool checked);void on_delete_2_clicked(bool checked);void on_fenshu_clicked(bool checked);void on_pow_clicked(bool checked);void on_genhao_clicked(bool checked);void on_aors_clicked(bool checked);void on_yu_clicked(bool checked);private:Ui::Widget *ui;QString symbol = "";QString num1 = "";QString num2 = "";QString over = "";QString msg = "";bool isSave01 = true;bool isSave02 = true;
};#endif // WIDGET_H
.cpp
#include "widget.h"
#include "QIcon"
#include "QString"
#include "QDebug"
#include "QLabel"
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setFixedSize(430,550);this->setWindowTitle("计算器");this->setWindowIcon(QIcon(":/image/computer.webp"));//使用setStyleSheet方法设置标签颜色ui->label_msg->setStyleSheet("QLabel { color: grey; }");connect(ui->add,SIGNAL(clicked(bool)),this,SLOT(bnt_add()));connect(ui->div,SIGNAL(clicked(bool)),this,SLOT(bnt_div()));connect(ui->sub,SIGNAL(clicked(bool)),this,SLOT(bnt_sub()));connect(ui->mul,SIGNAL(clicked(bool)),this,SLOT(bnt_mul()));connect(ui->over,SIGNAL(clicked(bool)),this,SLOT(bnt_over()));connect(ui->btn_d,SIGNAL(clicked(bool)),this,SLOT(bnt_d()));connect(ui->push_Botton_0,SIGNAL(clicked(bool)),this,SLOT(bnt_num0()));connect(ui->push_Botton_1,SIGNAL(clicked(bool)),this,SLOT(bnt_num1()));connect(ui->push_Botton_2,SIGNAL(clicked(bool)),this,SLOT(bnt_num2()));connect(ui->push_Botton_3,SIGNAL(clicked(bool)),this,SLOT(bnt_num3()));connect(ui->push_Botton_4,SIGNAL(clicked(bool)),this,SLOT(bnt_num4()));connect(ui->push_Botton_5,SIGNAL(clicked(bool)),this,SLOT(bnt_num5()));connect(ui->push_Botton_6,SIGNAL(clicked(bool)),this,SLOT(bnt_num6()));connect(ui->push_Botton_7,SIGNAL(clicked(bool)),this,SLOT(bnt_num7()));connect(ui->push_Botton_8,SIGNAL(clicked(bool)),this,SLOT(bnt_num8()));connect(ui->push_Botton_9,SIGNAL(clicked(bool)),this,SLOT(bnt_num9()));}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);
// painter.drawPixmap(0,0,width(),height(),QPixmap(":/image/bizhi.jpg"));
}
//数字0代码段
void Widget::bnt_num0()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("0");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("0");ui->label_idet->setText(num2);}
}
//数字1代码段
void Widget::bnt_num1()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("1");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("1");ui->label_idet->setText(num2);}
}
//数字2代码段
void Widget::bnt_num2()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("2");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("2");ui->label_idet->setText(num2);}
}
//数字3代码段
void Widget::bnt_num3()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("3");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("3");ui->label_idet->setText(num2);}
}
//数字4代码段
void Widget::bnt_num4()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("4");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("4");ui->label_idet->setText(num2);}
}
//数字5代码段
void Widget::bnt_num5()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("5");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("5");ui->label_idet->setText(num2);}
}
//数字6代码段
void Widget::bnt_num6()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("6");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("6");ui->label_idet->setText(num2);}
}
//数字7代码段
void Widget::bnt_num7()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("7");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("7");ui->label_idet->setText(num2);}
}
//数字8代码段
void Widget::bnt_num8()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("8");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("8");ui->label_idet->setText(num2);}
}
//数字9代码段
void Widget::bnt_num9()
{if(symbol == ""){if(num1 == "0"){num1.chop(1);}num1.append("9");ui->label_idet->setText(num1);}else{if(num2 == "0"){num2.chop(1);}num2.append("9");ui->label_idet->setText(num2);}
}
//小数点代码段
void Widget::bnt_d()
{if(symbol == ""){num1.append(".");ui->label_idet->setText(num1);}else{num2.append(".");ui->label_idet->setText(num2);}
}//加法
void Widget::bnt_add()
{double n1 = num1.toDouble();double n2 = num2.toDouble();double x = 0.0;if(symbol == "+"){//计算三位以上的式子x = n1 + n2;num1 = QString::number(x);qDebug()<<"x="<<x;}else if (symbol =="-"){x = n1 - n2;num1 = QString::number(x);}else if (symbol =="×"){x = n1 * n2;num1 = QString::number(x);}else if (symbol =="÷"){x = n1 / n2;num1 = QString::number(x);}else if(symbol == "%"){if(num1 == ""){ui->label_msg->setText("0");}else if(num2 != ""){num1 = QString::number(x);}}num2 = "";msg = "";//将式子放入信息栏中if(isSave01){msg.append(num1);}symbol = "+";msg.append(symbol);ui->label_msg->setText(msg);isSave01 = true;}
//减法
void Widget::bnt_sub()
{double n1 = num1.toDouble();double n2 = num2.toDouble();double x = 0.0;if(symbol == "-"){//计算三位以上的式子x = n1 - n2;num1 = QString::number(x);qDebug()<<"x="<<x;}else if (symbol =="+"){x = n1 + n2;num1 = QString::number(x);}else if (symbol =="×"){x = n1 * n2;num1 = QString::number(x);}else if (symbol =="÷"){x = n1 / n2;num1 = QString::number(x);}else if(symbol == "%"){if(num1 == ""){ui->label_msg->setText("0");}else if(num2 != ""){num1 = QString::number(x);}}num2 = "";msg = "";//将式子放入信息栏中if(isSave01){msg.append(num1);}symbol = "-";msg.append(symbol);ui->label_msg->setText(msg);isSave01 = true;
}
//乘法
void Widget::bnt_mul()
{double n1 = num1.toDouble();double n2 = num2.toDouble();double x = 0.0;if(symbol == "×"){//计算三位以上的式子x = n1 * n2;num1 = QString::number(x);qDebug()<<"x="<<x;}else if (symbol =="-"){x = n1 - n2;num1 = QString::number(x);}else if (symbol =="+"){x = n1 + n2;num1 = QString::number(x);}else if (symbol =="÷"){x = n1 / n2;num1 = QString::number(x);}else if(symbol == "%"){if(num1 == ""){ui->label_msg->setText("0");}else if(num2 != ""){num1 = QString::number(x);}}num2 = "";msg = "";//将式子放入信息栏中if(isSave01){msg.append(num1);}symbol = "×";msg.append(symbol);ui->label_msg->setText(msg);isSave01 = true;}
//除法
void Widget::bnt_div()
{double n1 = num1.toDouble();double n2 = num2.toDouble();double x = 0.0;if(symbol == "÷"){//计算三位以上的式子x = n1 / n2;num1 = QString::number(x);qDebug()<<"x="<<x;}else if (symbol =="-"){x = n1 - n2;num1 = QString::number(x);}else if (symbol =="×"){x = n1 * n2;num1 = QString::number(x);}else if (symbol =="+"){x = n1 + n2;num1 = QString::number(x);}else if(symbol == "%"){if(num1 == ""){ui->label_msg->setText("0");}else if(num2 != ""){x = n1 / n2;num1 = QString::number(x);}}num2 = "";msg = "";//将式子放入信息栏中if(isSave01){msg.append(num1);}symbol = "÷";msg.append(symbol);ui->label_msg->setText(msg);isSave01 = true;
}
//等于
void Widget::bnt_over()
{if(isSave02){msg.append(num2);}double n1 = num1.toDouble();double n2 = num2.toDouble();double x = 0;if(symbol == "+"){//计算按下等于之后的结果x = n1 + n2;}else if(symbol == "-"){x = n1 - n2;}else if(symbol == "×"){x = n1 * n2;}else if(symbol == "÷"){if (n2 != 0){x = n1 / n2;}else{ui->label_idet->setText("除数不能为0");return;}}else if(symbol == "%"){//判断num1存在的同时num2也存在if(num1 == ""){ui->label_msg->setText("0");}else if(num2 != ""){}}else if(symbol == ""){x = n1;}msg.append("=");ui->label_msg->setText(msg);QString str = QString::number(x);ui->label_idet->setText(str);num1 = str;num2 = "";symbol = "";msg = "";isSave02 = true;}void Widget::on_clear_clicked(bool checked)
{//删除最近一项if(symbol == ""){num1 = "";ui->label_idet->setText("0");}else{num2 = "";ui->label_idet->setText("0");}}void Widget::on_clearall_clicked(bool checked)
{//删除所有项num1 = "";num2 = "";symbol = "";ui->label_idet->setText("0");msg = "";ui->label_msg->clear();
}void Widget::on_delete_2_clicked(bool checked)
{//删除一个数字if(symbol == ""){num1.chop(1);ui->label_idet->setText(num1);}else{num2.chop(1);ui->label_idet->setText(num2);}
}void Widget::on_fenshu_clicked(bool checked)
{//化为分数if(num1 == 0){ui->label_idet->setText("分母不能为0");}else{if(symbol == ""){double n1 = num1.toDouble();msg.append("1/(");msg.append(QString::number(n1));msg.append(")");ui->label_msg->setText(msg);n1 = 1 / num1.toDouble();QString str = QString::number(n1);num1 = str;ui->label_idet->setText(str);}else{double n2 = num2.toDouble();isSave02=false;msg.append("1/(");msg.append(QString::number(n2));msg.append(")");ui->label_msg->setText(msg);n2 = sqrt(num2.toDouble());qDebug() << "n2:" << n2 << endl;QString str = QString::number(n2);num2 = str;ui->label_idet->setText(str);}}
}void Widget::on_pow_clicked(bool checked)
{//平方if(symbol == ""){double n1 = num1.toDouble();msg.append("sqr(");msg.append(QString::number(n1));msg.append(")");ui->label_msg->setText(msg);n1 = num1.toDouble() * num1.toDouble();QString str = QString::number(n1);num1 = str;ui->label_idet->setText(str);}else{double n2 = num2.toDouble();isSave02=false;msg.append("sqr(");msg.append(QString::number(n2));msg.append(")");ui->label_msg->setText(msg);n2 = num2.toDouble() * num2.toDouble();qDebug() << "n2:" << n2 << endl;QString str = QString::number(n2);num2 = str;ui->label_idet->setText(str);}
}void Widget::on_genhao_clicked(bool checked)
{//开根号if(symbol == ""){double n1 = num1.toDouble();msg.append("根号(");msg.append(QString::number(n1));msg.append(")");ui->label_msg->setText(msg);n1 = sqrt(num1.toDouble());QString str = QString::number(n1);num1 = str;ui->label_idet->setText(str);}else{double n2 = num2.toDouble();isSave02=false;msg.append("根号(");msg.append(QString::number(n2));msg.append(")");ui->label_msg->setText(msg);n2 = sqrt(num2.toDouble());qDebug() << "n2:" << n2 << endl;QString str = QString::number(n2);num2 = str;ui->label_idet->setText(str);}}void Widget::on_aors_clicked(bool checked)
{//转换正负数if(symbol == ""){double n1 = num1.toDouble();n1 = -n1;num1 = QString::number(n1);ui->label_idet->setText(num1);qDebug() << "符号1:" << num1;}else{double n2 = num2.toDouble();n2 = -n2;num2 = QString::number(n2);ui->label_idet->setText(num2);qDebug() << "符号2:" << num2;}
}void Widget::on_yu_clicked(bool checked)//有问题
{//72 + 5% =3.6//72的5%是3.6,所以72+3.6就是75.6//将式子放入信息栏中double n1 = num1.toDouble();double n2 = num2.toDouble();double x;if(num1 != "" && num2 != ""){n2 = (n2 / 100) * n1 ;num2 = QString::number(n2);qDebug() << "n2 = "<<n2;}else if(num2 != ""){ui->label_msg->setText("0");}if(symbol == "÷"){//计算三位以上的式子x = n1 / n2;num1 = QString::number(x);qDebug()<<"x="<<x;}else if (symbol =="-"){x = n1 - n2;num1 = QString::number(x);}else if (symbol =="×"){x = n1 * n2;num1 = QString::number(x);}else if (symbol =="+"){x = n1 + n2;num1 = QString::number(x);}msg.append(num2);num2 = "";}
相关文章:
qt作业day2
1:在注册登录的练习里面,追加一个QListWidget 项目列表 要求:点击注册之后,将账号显示到 listWidget上面去 以及,在listWidget中双击某个账号的时候,将该账号删除 .h #ifndef WIDGET_H #define WIDGET_H …...
Qt:day1
一、作业 写1个Widget窗口,窗口里面放1个按钮,按钮随便叫什么; 创建2个Widget对象: Widget w1, w2; w1.show(); w2不管; 要求: 点击 w1.btn,w1隐藏,w2显示; 点击 w2.btn&…...
基于微信小程序的停车场管理系统的设计与实现
第1章 绪论 1.1 课题背景 随着移动互联形式的不断发展,各行各业都在摸索移动互联对本行业的改变,不断的尝试开发出适合于本行业或者本公司的APP。但是这样一来用户的手机上就需要安装各种软件,但是APP作为一个只为某个公司服务的一个软件&a…...
详细Linux基础知识(不断完善)
终端类型分类 1. 物理终端 直接连接到计算机的硬件设备2. 虚拟终端 通过快捷键切换的文本模式界面: Ctrl + Alt + F1 # 登录窗口 Ctrl + Alt + F2 # 当前图形界面 Ctrl + Alt + F3 # 虚拟命令终端 Ctrl + Alt + F4-F6 # 备用虚拟终端3. 图形终端 模拟终端:图形环境中的…...
类和对象-继承-C++
1.定义 面向对象的三大特征之一,为了减少重复的代码 2.语法 class 子类 :继承方式 父类 (子类也叫派生类,父类也称为基类) 例:class age:public person; #include<iostrea…...
初阶数据结构(C语言实现)——3顺序表和链表(1)
目录 【本节目标】1. 线性表2.顺序表2.1概念及结构2.2 接口实现2.2.0 动态顺序表2.2.1 顺序表初始化SLInit()2.2.2 销毁和打印2.2.3 尾插SLPushBack()2.2.4 尾删SLPopBack()2.2.5 头插2.2.6 头删2.2.7 插入…...
nuxt常用组件库html-validator、@nuxtjs/i18n、@nuxt/image、@unocss/nuxt使用解析
html-validator 主要用于自动验证nuxt服务器呈现的HTML(SSR和SSG),以检测可能导致水合错误的HTML常见问题,有助于减少水合错误,检测常见的可访问性错误。 安装 npx nuxilatest module add html-validator配置 若自动更新nuxt.config.ts配置文…...
4G工业路由器在公交充电桩中的应用与优势
随着电动公交车的普及,公交充电桩的稳定运行和高效管理是交通营运部门最关心的问题。4G工业路由器凭借其卓越的数据采集和通讯能力,成为实现充电桩智能化管理的关键。 公交充电桩运维管理需求概述: 1.实时性:实时监控充电状态、剩…...
matlab 四维数据可视化(已解决)
虽然这不是传统意义上的“4维可视化”,但你可以通过在三维空间中表示两个维度来间接展示4维数据。例如,你可以使用颜色来表示第四个维度。 clc clear close all% 假设X, Y, Z为你的三维数据,C为第四维数据 X rand(100, 1); Y rand(100, 1);…...
歌曲分类和流行度预测
1. 项目介绍 本项目从kaggle平台上下载了数据集,该数据集包含了3万多首来自Spotify API 的歌曲,共有23个特征。首先对数据集进行预处理,如重复行、缺失值、标准化处理等。再对预处理后的数据进行探索性分析,观察各变量的分布情况&…...
经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑
背景 对于一些内部使用的管理系统来说,可能没有引入Redis,又想基于现有的基础设施处理并发问题,而数据库是每个应用都避不开的基础设施之一,因此分享个我曾经维护过的一个系统中,使用数据库表来实现事务锁的方式。 之…...
oracle decode
1. 基本语法 DECODE(expression, search1, result1, search2, result2, ..., default_result) expression :需要比较的表达式或列。search1, search2, ... :要匹配的值。result1, result2, ... :当 expression 等于 search 时返回的结果。def…...
让后台界面布局更灵活:在GrapesJS中复刻Java的五区式布局
当你想要在可视化编辑器中做一个类似Java BorderLayout 的五区布局,却发现市面上大多只能“简单拼接”而难以自由扩展时,你或许就需要一个更灵活的布局管理器来帮忙。本篇文章就从这个痛点开始,带你一步步揭秘如何用 GrapesJS 自定义并实现一…...
【网络安全 | 漏洞挖掘】分享21个基础漏洞案例
未经许可,不得转载。 文章目录 案例1:绕过500状态码案例2:修改前端实现任意文件上传案例3:Nmap扫描端口命令案例4:绕过限制实现任意文件读取案例5:删除任意目录文件案例6:锁定任意账户案例7:重置任意用户密码案例8:接管任意账户方法一方法二案例9:功能校验机制绕过案…...
期权适合什么类型的投资者交易?
财顺小编本文主要介绍期权适合什么类型的投资者交易?期权适合的投资者类型需结合其风险偏好、投资目标及市场判断能力综合评估。 期权适合什么类型的投资者交易? 1. 风险管理型投资者(稳健型) 适用场景:持有股票、大…...
浅谈C++/C命名冲突
前言 在这里我会简要地介绍产生命名冲突的原因,和C中处理命名冲突的方法,同时和C语言的解决办法进行比较。 相信你在阅读完之后一定会有收获。对于我们来说,了解编译器的编译链接过程才能更好的理解编译器是如何报错的,更能让我们…...
【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架
【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架 1. 引言 本教程旨在帮助嵌入式开发小白从零开始,学习如何在STM32F407微控制器上实现一个基于串口的数据接收程序。该程序能够通过判断数据头来接收一串数据,并将其存储到缓冲区中…...
C# OnnxRuntime部署DAMO-YOLO香烟检测
目录 说明 效果 模型信息 项目 代码 下载 参考 说明 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name:input tensor:Floa…...
探索Elasticsearch:索引的CRUD
在企业环境中,Elasticsearch的索引CRUD(创建Create、读取Read、更新Update、删除Delete)操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要,尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…...
C++:多态与虚函数
1.虚函数,在函数前加virtual即可。有虚函数时,父类指针指向父类对象时就会使用父类的成员,指向子类对象时就可以使用子类成员,进而我们引入了多态的概念。 2.多态:父类指针指向子类的对象,通过父类指针调用…...
【Python 数据结构 2.时间复杂度和空间复杂度】
Life is a journey —— 25.2.28 一、引例:穷举法 1.单层循环 所谓穷举法,就是我们通常所说的枚举,就是把所有情况都遍历了的意思。 例:给定n(n ≤ 1000)个元素ai,求其中奇数有多少个 判断一…...
【Qt QML】QML鼠标事件(MouseArea)
QML鼠标事件全面解析 一、MouseArea基础概念 在 QML 中,鼠标事件是处理用户与界面元素交互的重要部分。QML 提供了多种方式来处理鼠标事件,MouseArea 是 QML 中用于处理鼠标事件的核心元素,它可以覆盖在其他元素之上,捕获鼠标操作并触发相应的信号。 1、基本用法 import …...
医脉云枢:中医药典籍知识图谱与非遗传承多维可视化系统
核心优势: "医脉"直击主题,"云枢"体现技术前瞻性 "非遗传承"呼应二十大文化政策 "多维"涵盖3D模型、时间轴、地图等多种可视化形式 技术栈:Vue Flask Element UI ECharts MySQL 同时参考了…...
vue 和 react 底层采用的 diff 算法的区别
Vue 3 和 React 在底层 Diff 算法上的实现确实有一些区别,主要体现在设计理念、性能优化策略以及具体实现方式上。以下是对两者 Diff 算法差异的详细分析: 1. 总体设计理念 Vue 3 的 Diff 算法 Vue 3 的虚拟 DOM Diff 算法基于“双端比较”思想ÿ…...
养老小程序方案详解居家养老小程序系统
养老小程序,上门居家养老小程序,用户端护工端小程序,管理后台。php开发语言,可源码搭建,二次开发或者定制开发。 一 用户端:小程序 核心功能模块:用户完善个人健康档案,在线选择服…...
Tauri跨平台开发问题及解决方案深度解析(React版)
Tauri跨平台开发问题及解决方案深度解析(React版) 一、环境配置与项目初始化难题(React适配) 1.1 React项目初始化 推荐模板: # 使用ReactTypeScript模板 npm create tauri-applatest -- --template react-ts# 项目…...
【OMCI实践】omci.lua脚本文件(独家分享)
引言 omci.lua文件是Wireshark的OMCI协议解析插件的核心组件。它配合BinDecHex.lua,可以解析OMCI协议的数据包,提取出消息类型、受管实体标识、受管实体属性等关键信息,并以人类可读的形式显示在Wireshark的解码视图中,方便研发人…...
React高级内容探索
flushSync确保了DOM立即更新 flushSync让你强制React同步刷新提供回调中的任何更新,这确保了DOM立即更新 flushSync是DOM更新之后的,像vue中的nextTick: import { useState,useRef} from "react" import { flushSync} from &quo…...
前端水印实现方式
一、简介 简单来说,前端水印就是在网页或应用程序的前端界面上添加的一种标记,通常是文本、图标或图案等形式。它就像给你的数字内容贴上了一个独特的 “标签”,用于标识内容的归属、防止未经授权的使用和传播。比如,一些在线图片…...
【新手入门】SQL注入之getshell(木马)
木马介绍 木马其实就是一段程序,这个程序运行到目标主机上时,主要可以对目标进行远程控制、盗取信息等功能,一般不会破坏目标主机,当然,这也看黑客是否想要搞破坏。 按照功能分类:远控型、破坏型、流氓软件型、盗取信…...
Git操作指南:分支合并、回退及其他重要操作
在软件开发的协作过程中,Git 作为一款强大的版本控制系统,能帮助开发者高效管理代码的各个版本和分支。本文将详细介绍 Git 中常见的分支合并、取消本地修改、回退操作等,并提供通俗易懂的解释和步骤指南。 一、分支合并 分支合并是 Git 工…...
Vue 3 引入全局状态管理 pinia
什么是全局状态管理? 所有页面全局共享的变量,而不是局限在某一个页面中。适合作为全局状态的数据: 已登录用户信息 (每个页面几乎都要用) Pinia 是一个主流的状态管理库,相比于 Vuex 来说使用更简单,可参考 入门文档 开始 | Pinia 进行引…...
SQL 中为什么参数多了not in 比 in 慢多了,怎么优化
开发工作中,我发现一个现象,比喻下面的两个语句: select * from shangpin where spdm in (1,2,3,...); select * from shangpin where spdm not in (1,2,3,...); 当参数比较少的时候还看不出来什么,但是遇到参数上了几百几千&am…...
[密码学实战]Java生成SM2根证书及用户证书
前言 在国密算法体系中,SM2是基于椭圆曲线密码(ECC)的非对称加密算法,广泛应用于数字证书、签名验签等场景。本文将结合代码实现,详细讲解如何通过Java生成SM2根证书及用户证书,并深入分析其核心原理。 一、证书验证 1.代码运行结果 2.根证书验证 3.用户证书验证 二、…...
API接口:企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南
API接口:企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南 本文详细介绍一种基于 Web 搜索方式实现的企业信息查询接口,适用于数据补全、企业资质验证、信息查询等场景。文章内容涵盖接口功能、请求参数、返…...
版图自动化连接算法开发 00004 ------ 给定一个点,添加一个中间点实现 Manhattan 方式连接两个给定的坐标点
版图自动化连接算法开发 00004 ------ 给定一个点,添加一个中间点实现 Manhattan 方式连接两个给定的坐标点 引言正文引言 必读文章 ------ 版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点。 此处,我们对给定点的坐标进行一下限制,因为是只添加一个点,因…...
医疗行业电脑终端如何防病毒——火绒企业版杀毒软件
医疗物联网技术广泛应用,使得医院网络空间中增加了诸多新型终端设备。这些设备类型多样、型号各异,风险暴露面积大。火绒安全对医疗机构终端安全出现的问题、不足、需求等,提出整体解决方案。 医疗行业终端安全防护痛点 系统老旧 医院、区…...
【入门Web安全之前端学习的侧重点和针对性的建议】
入门Web安全之前端学习的侧重点和针对性的建议 一、HTML:理解攻击载荷的载体二、CSS:次要但需警惕点击劫持三、JavaScript:渗透测试的核心重点四、浏览器工具:渗透测试的实战武器五、学习建议与资源六、总结:渗透测试者…...
2024年中国城市统计年鉴(PDF+excel)
2024年中国城市统计年鉴(PDFexcel) 说明:包括地级县级市 格式:PDFEXCEL 《中国城市统计年鉴》是一部全面反映中国城市发展状况的官方统计出版物,包括各级城市的详细统计数据。这部年鉴自1985年开始出版,…...
详解DeepSeek模型底层原理及和ChatGPT区别点
一、DeepSeek大模型原理 架构基础 DeepSeek基于Transformer架构,Transformer架构主要由编码器和解码器组成,在自然语言处理任务中,通常使用的是Transformer的解码器部分。它的核心是自注意力机制(Self - Attention),这个机制允许模型在处理输入序列时,关注序列中不同位…...
Github 2025-03-03 开源项目周报Top14
根据Github Trendings的统计,本周(2025-03-03统计)共有14个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目4Jupyter Notebook项目3Go项目2JavaScript项目2C++项目2Vue项目1Rust项目1Dify.AI: 开源的LLM应用程序开发平台 创建…...
探秘基带算法:从原理到5G时代的通信变革【二】Viterbi解码
文章目录 二、关键算法原理剖析2.1 Viterbi 解码2.1.1 卷积码与网格图基础**卷积码****网格图****生成多项式****理想情况下解码过程** 2.1.2 Viterbi 算法核心思想2.1.3 路径度量与状态转移机制2.1.4 算法流程与关键步骤详解2.1.5 译码算法举例与复杂度分析2.1.6 算法代码示例…...
MAC 本地搭建部署 dify(含 github访问超时+Docker镜像源拉取超时解决方案)
目录 一、什么是 dify? 二、安装 docker 1. 什么是 docker? 2. docker下载地址 三、安装 dify 1. dify下载地址 2.可能遇到问题一: github访问超时 3.下载后完成解压 4.进入到 cmd 终端环境,执行下面三个命令 5.可能遇到…...
扫描纸质文件转pdf---少页数+手机+电脑协作
针对手机上扫描软件扫描文件转pdf要收费的问题,提供一种在页数较少时的免费替代方案 。 实现方法:手机软件的免费功能将文件扫描并保存为图片电脑端在word中将图片拼成文档word转pdf 1.借助于“扫描全能王”APP可以免费扫描文件为图片的功能࿰…...
[KEIL]单片机技巧 01
1、查看外设寄存器的值 配合对应的芯片开发手册以查看寄存器及其每一位的意义,可以解决90%以上的单纯的片内外设bug,学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步,一定要善于使用这个工具,而不是外设…...
B站上优质的Java和SpringBoot相关视频教程
Java和SpringBoot相关视频教程 Java大师课 【Java】上部:Java Master Class大师课教程【Java】下部:Java Master Class大师课教程 Spring Boot & React 【Spring Boot & React】Spring Boot和React教程 Spring Boot 【Spring Boot】Spring…...
Spring学习笔记04:spring mvc和Spring Boot之间是什么关系?
Spring MVC 是什么? 想象你开了一家餐厅,顾客(用户)点菜、服务员传话、厨师做菜、最后服务员上菜。Spring MVC 就是规定这套流程的“餐厅管理规则”,专门用于处理网页请求(HTTP)和响应。 核心…...
【JavaEE】线程安全
【JavaEE】线程安全 一、引出线程安全二、引发线程安全的原因三、解决线程安全问题3.1 synchronized关键字(解决修改操作不是原子的)3.1.1 synchronized的特性3.1.1 synchronized的使用事例 3.2 volatile 关键字(解决内存可见性) …...
Centos7源码编译安装Sqlite最新版本
下载源码 https://www.sqlite.org/download.html 复制下载链接,然后用 wget 下载 wget https://www.sqlite.org/2025/sqlite-autoconf-3490100.tar.gz 解压缩编译安装 tar -zxf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefi…...
C++(蓝桥杯常考点)
前言:这个是针对于蓝桥杯竞赛常考的C内容,容器这些等下棋期再讲 C 在DEVC中注释和取消注释的方法:ctrl/ ASCII值(常用的): A-Z:65-90 a-z:97-122 0-9:48-57 换行/n:10科学计数法:eg:…...