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

[Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget

目录

1.多元素控件介绍 

2.ListWidget控件

属性

核心方法

核心信号

细节

Demo:编辑日程

3.TableWidget控件 

核心方法

QTableWidgetItem核心信号

QTableWidgetItem核心方法

细节

Demo:编辑学生信息

4.TreeWidget控件 

核心方法

核心信号

QTreeWidgetItem核心方法

细节

控件使用案例


1.多元素控件介绍 

        Qt中为我们提供的多元素控件有QListWidget、QListView、QTableWidget、QTableView、QTreeWidget、QTreeView六个。那么我可以发现,他们是两两一组,xxxWidget和xxxView两种形式,那么他俩之间有什么区别呢?

        xxxView是更底层的实现,xxxWidget是基于xxxView封装而来的,用户使用起来比较容易。此处的xxxView是MVC结构的实现,MVC是软件开发中非常经典的软件结构组织形式。

M:model数据   V:view视图(界面) C:controller控制器,数据和视图之间的业务流程。

        对于xxxView来说只是负责了上述的视图,不负责数据如何表示,以及数据和视图之间如何交互,如果用户使用xxxView的话,就需要自己创建model对象,和视图关联起来。而QxxxWidget则是QxxxView的子类,对Model进行了封装,不需要我们自己去创建model对象,直接向xxxWidget中添加数据即可。

2.ListWidget控件

        该控件表示的是一个纵向的列表

属性
属性说明
currentRow当前被选中的是第几行
count一共有多少行
sortingEnabled是否允许排序
isWrapping是否允许换行
itemAlignment元素的对齐方式
selectRectVisible被选中的元素矩形是否可见
spacing元素之间的间隔
核心方法
方法说明

addItem(QString& label)

addItem(QListWidgetItem* item)

列表中添加元素
currentItem()返回当前选中的QListWidgetItem* 对象元素
setCurrentItem(QListWidgetItem* item)设置选中哪一个元素
setCurrentRow(int row)设置选中第几行的元素

insertItem(const QString& label, int row)

insertItem(QListWidgetItem* item, int row)

第一个是添加到最后一行,这个方法是插入到第row行
item(int row)获取第row行的QListWidgetItem* 对象元素
takeItem(int row)删除指定行的元素,返回删除的元素对象
核心信号
信号说明
currentItemChanged(QListWidgetItem* current, QListWidgetItem* old)选中不同元素的时候会触发,参数是当前选中的元素和之前选中的元素
currentRowChanged(int)选中不同元素的时候触发,参数是当前选中元素的行数
itemClicked(QListWidgetItem* item)点击某个元素的时候触发
itemDoubleClicked(QListWidgetItem* item)双击某个元素的时候触发
itemEntered(QListWidgetItem* item)鼠标进入元素范围触发
细节
  • 对于一个QListWidget控件,内部的元素是一个个的QListWidgetItem组成的。本质上改类的内部就是一个文本+图标构成,所以QListWidgetItem内部提供了很多操作文本和图标的方法。例如:设置字体、设置图标、设置对齐方式等内容。
Demo:编辑日程

        该demo中有QListWidget控件来显示日程列表,提供了两个按钮去进行操作日程表的添加和删除的操作,为添加按钮设置一个QLineEdit控件,在增加的时候,获取QLineEdit控件输入的内容,然后添加到日程表当中。删除的时候,获取到选中的是第几行,然后进行调用方法删除。

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//初始化日程表//以字符串形式添加元素ui->listWidget->addItem("健身");ui->listWidget->addItem("学习");ui->listWidget->addItem("打球");//用对象的形式添加元素QListWidgetItem* item = new QListWidgetItem("玩游戏");ui->listWidget->addItem(item);//匿名对象添加元素ui->listWidget->addItem(new QListWidgetItem("吃饭"));
}Widget::~Widget()
{delete ui;
}//增加日程
void Widget::on_pushButton_add_clicked()
{//获取lineEdit单行输入框中的内容const QString str = ui->lineEdit->text();//设置到listWidegt控件中ui->listWidget->addItem(new QListWidgetItem(str));
}//删除日程
void Widget::on_pushButton_del_clicked()
{//获取到被选中的元素的行号int row = ui->listWidget->currentRow();if(row < 0)return;//删除ui->listWidget->takeItem(row);
}

3.TableWidget控件 

        该控件表示的是一个表格控件,包括横向和纵向两个方向由若干行若干列组成,每一个表格都是由一个QTableWidgetItem对象构成。

核心方法
方法说明
item(int row, int column)根据行数和列数获取指定的QTableWidgetItem*对象
setItem(int row, int column, QTbleWidget*)根据行数列数设置表格中的元素
currentItem()返回被选中的表格QTableWidgetItem对象
currentRow()返回被选中的是第几行
currentColumn()返回被选中的是第几列

row(QTableWidgetItem*)

获取指定item是第几行
column(QTableWidgetItem*)获取指定item是第几列

rowCount()

获取行数
columnCount()获取列数
insertRow(int row)在第row行插入
insertColumn(int column)在第column列插入
removeRow(int row)删除第row行
removeColumn(int column)删除第column列
setHorizontalHeaderItem(int column, QTableWidget*)设置指定列的表头
setVericalHeaderItem(int row, QTableWidget*)设置指定行的表头
QTableWidgetItem核心信号
信号说明
cellClicked(int row, int column)点击单元格的时候触发
cellDoubleClicked(int row, int column)双击单元格的时候触发
cellEntered(int row, int column)鼠标进入单元格的时候触发
currentCellChanged(int row, int column, int prevuiousRow, int previousColumn)选中不同的单元格的时候触发
QTableWidgetItem核心方法
方法说明
row()获取当前在第几行
column()获取当前在第几列

setText(const QString&)

设置文本
setTextAlignment(int)设置文本呢对齐方式
setlcon(const QIcon&)设置图标
setSelected(bool)设置被选中
setSizeHints(const QSize&)设置尺寸
setFont(onst QFont&)设置字体

细节
  • 对于单元格默认程序运行之后是可以编写文本内容的,如果我们不想让用户去修改单元格中的内容的话,需要设置:

ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

Demo:编辑学生信息
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lineEdit->setPlaceholderText("请输入新增的列名称");//创建3行3列ui->tableWidget->insertRow(0);ui->tableWidget->insertRow(1);ui->tableWidget->insertRow(2);ui->tableWidget->insertColumn(0);ui->tableWidget->insertColumn(1);ui->tableWidget->insertColumn(2);//设置每一列的名称ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("学号"));ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("姓名"));ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("电话号"));//添加初始数据ui->tableWidget->setItem(0, 0, new QTableWidgetItem("2000"));ui->tableWidget->setItem(0, 1, new QTableWidgetItem("zhangsan"));ui->tableWidget->setItem(0, 2, new QTableWidgetItem("000-0000-0000"));ui->tableWidget->setItem(1, 0, new QTableWidgetItem("2001"));ui->tableWidget->setItem(1, 1, new QTableWidgetItem("lisi"));ui->tableWidget->setItem(1, 2, new QTableWidgetItem("123-4567-8901"));ui->tableWidget->setItem(2, 0, new QTableWidgetItem("2002"));ui->tableWidget->setItem(2, 1, new QTableWidgetItem("wangwu"));ui->tableWidget->setItem(2, 2, new QTableWidgetItem("342-4483-1992"));
}Widget::~Widget()
{delete ui;
}//增加一行
void Widget::on_pushButton_add_row_clicked()
{//获取行数int row_count = ui->tableWidget->rowCount();//增加一行ui->tableWidget->insertRow(row_count);
}//增加一列
void Widget::on_pushButton_column_add_clicked()
{//获取列数int column_count = ui->tableWidget->columnCount();//获取新增列的表头const QString str = ui->lineEdit->text();//如果为空的话,就不添加了if(str.isEmpty())return;//增加一列ui->tableWidget->insertColumn(column_count);//设置表头ui->tableWidget->setHorizontalHeaderItem(column_count, new QTableWidgetItem(str));
}//删除选中行
void Widget::on_pushButton_row_del_clicked()
{//获取当前选中的行int row = ui->tableWidget->currentRow();//删除ui->tableWidget->removeRow(row);
}//删除选中列
void Widget::on_pushButton_column_del_clicked()
{//获取当前选中的列int column = ui->tableWidget->currentColumn();//删除ui->tableWidget->removeColumn(column);
}

4.TreeWidget控件 

        该控件表示的是一个树形的控件,里面的每一元素都是一个QTreeWidgetItem对象,该对象内部可以包含多个文本和图标,每一个文本或者图标是一列。可以给QTreeWidget设置顶层节点,顶层节点可以是多个,然后再给顶层节点添加子节点,从而构成了树形结构。

核心方法
方法

说明

clear()清空所有子节点
addTopLevelItem(QTreeWidegtItem* item)新增顶层节点
topLevelItem(int index)获取指定下标的顶层节点
topLevelItemCount()获取顶层节点的个数
indexOfTopLevelItem(QTreeWidgetItem* item)查询指定节点在顶层节点中的下标
takeTopLevelItem(int index)删除指定的顶层节点,返回删除的QTreeWidgetItem*元素对象
currentItem()获取到当前选中的节点,返回QTreeWidgetItem元素怒对象
setCurrentItem(QTreeWidgetItem* item)选中指定节点
setExpanded(bool)展开/关闭节点
setHeaderLabel(const QString& text)设置TreeWidget的header名称
核心信号
信号说明

currentChanged(QTreeWidgetItem* current, QTreeWidgetItem* old)

切换园中元素的时候触发
itemClicked(QTreeWidgetItem* item, int col)点击元素的时候触发
itemDoubleClicked(QTreeWidgetItem* item, int col)双击元素的时候触发
itemEntered(QTreeWidgetItem* item, int col)鼠标进入元素范围的时候触发
itemExpanded(QTreeWidgetItem* item)元素被展开的时候触发
itemCollapsend(QTreeWidgetItem* item)元素被折叠的时候触发
QTreeWidgetItem核心方法
方法说明
addChild(QTreeWidgetItem* child)新增子节点
childCount()获取子节点个数
child(int index)

获取指定下标的子节点,返回QTreeWidgetItem对象指针

takeChild(int index)删除指定下标的子节点
removeChild(QTreeWidgetItem* child)删除对应的元素
parent()获取该元素的父节点
细节
  • 在添加顶层节点或者子节点传递QTreeWidgetItem对象的时候,在设置文本的时候,需要传递两个参数,第一个表示第n列,第二个参数是文本内容,因为QTreeWidgetItem对象可以有很多列,所以需要传递设置的文本是第几列。但是如果设置多列的话,那么我们对应的设置控件名称的时候就需要调用setHeaderLabels设置多个列名称了。这样的话才能显示出来我们设置的多列元素。
  • 对于删除的时候来说,删除的时候需要调用他的父节点的删除函数,所以说要考虑删除元素的是不是顶层元素,因为顶层元素没有父元素,所以需要调用控件的删除函数去删除顶层元素,如果不是的话,调用父节点的删除函数即可。
  • 如果删除的节点下面还有子节点的话,也会一起删除的。
控件使用案例
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置根节点的名称ui->treeWidget->setHeaderLabel("食物");//添加顶层节点QTreeWidgetItem* item1 = new QTreeWidgetItem();item1->setText(0, "蔬菜");ui->treeWidget->addTopLevelItem(item1);QTreeWidgetItem* item2 = new QTreeWidgetItem();item2->setText(0, "水果");ui->treeWidget->addTopLevelItem(item2);
}Widget::~Widget()
{delete ui;
}//添加顶层元素
void Widget::on_pushButton_topItem_add_clicked()
{//获取输入框的文本内容const QString& str = ui->lineEdit->text();if(str.isEmpty())return;//设置到顶层节点QTreeWidgetItem* item = new QTreeWidgetItem();item->setText(0, str);ui->treeWidget->addTopLevelItem(item);
}//添加到选中元素
void Widget::on_pushButton_item_add_clicked()
{//获取输入框中的本文内容const QString& str = ui->lineEdit->text();if(str.isEmpty())return;//获取选中元素QTreeWidgetItem* item = ui->treeWidget->currentItem();if(item == nullptr)return;//添加节点QTreeWidgetItem* new_item = new QTreeWidgetItem();new_item->setText(0, str);item->addChild(new_item);//设置展开父节点item->setExpanded(true);
}//删除选中元素
void Widget::on_pushButton_item_del_clicked()
{//获取选中元素QTreeWidgetItem* item = ui->treeWidget->currentItem();if(item == nullptr)return;//获取父元素QTreeWidgetItem* parent = item->parent();//如果是顶层节点的话if(parent == nullptr){//获取下标int index = ui->treeWidget->indexOfTopLevelItem(item);//删除ui->treeWidget->takeTopLevelItem(index);}//非顶层节点else{parent->removeChild(item);}
}

相关文章:

[Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget

目录 1.多元素控件介绍 2.ListWidget控件 属性 核心方法 核心信号 细节 Demo&#xff1a;编辑日程 3.TableWidget控件 核心方法 QTableWidgetItem核心信号 QTableWidgetItem核心方法 细节 Demo&#xff1a;编辑学生信息 4.TreeWidget控件 核心方法 核心信号…...

_STM32关于CPU超频的参考_HAL

MCU: STM32F407VET6 官方最高稳定频率&#xff1a;168MHz 工具&#xff1a;STM32CubeMX 本篇仅仅只是提供超频&#xff08;默认指的是主频&#xff09;的简单方法&#xff0c;并未涉及STM32超频极限等问题。原理很简单&#xff0c;通过设置锁相环的倍频系数达到不同的频率&am…...

Flink链接Kafka

一、基于 Flink 的 Kafka 消息生产者 Kafka 生产者的创建与配置&#xff1a; 代码通过 FlinkKafkaProducer 创建 Kafka 生产者&#xff0c;用于向 Kafka 主题发送消息。Flink 执行环境的配置&#xff1a; 配置了 Flink 的检查点机制&#xff0c;确保消息的可靠性&#xff0c;支…...

Maven 配置本地仓库

步骤 1&#xff1a;修改 Maven 的 settings.xml 文件 找到你的 Maven 配置文件 settings.xml。 Windows: C:\Users\<你的用户名>\.m2\settings.xmlLinux/macOS: ~/.m2/settings.xml 打开 settings.xml 文件&#xff0c;找到 <localRepository> 标签。如果没有该标…...

【PHP】双方接口通信校验服务

请求方 使用 ApiAuthService::buildUrl($domain, [terminal => 1, ts => time()]); //http://域名/adminapi/login/platformLogin?sign=F7FE8A150DEC18BE8A71C5059742C81A&terminal=1&ts=1736904841接收方 $getParams = $this->request->get();$validate…...

mac 安装docker

1、下载docker 进入 /Applications/Docker.app/Contents/MacOS/Docker Desktop.app/Contents/Resources目录 把app.asar 文件备份 将下载的中文包复制进去。修改成一样的名字 [汉化包下载地址](https://github.com/asxez/DockerDesktop-CN)...

ANSYS Fluent学习笔记(七)求解器四部分

16.亚松弛因子 Controls面板里面设置&#xff0c;它能够稳定计算的过程。如果采用常规的迭代算法可能结果就会发生振荡的情况。采用亚松驰因子可以有助于残差的稳定。 他的取值范围是0-1&#xff0c;0代表没有亚松驰&#xff0c;1表示物理量变化很快&#xff0c;一般情况下取…...

【微服务】面试 3、 服务监控 SkyWalking

微服务监控的原因 问题定位&#xff1a;在微服务架构中&#xff0c;客户端&#xff08;如 PC 端、APP 端、小程序等&#xff09;请求后台服务需经过网关再路由到各个微服务&#xff0c;服务间可能存在多链路调用。当某一微服务挂掉时&#xff0c;在复杂的调用链路中难以迅速确定…...

llamafactory使用8张昇腾910b算力卡lora微调训练qwen2-72b大模型

说明 我需要在昇腾服务器上对Qwen2-72B大模型进行lora微调&#xff0c;改变其自我认知。 我的环境下是8张910B1卡。显存约512GB。 准备&#xff1a;安装llamafactory 请参考官方方法安装llamafactory&#xff1a;https://github.com/hiyouga/LLaMA-Factory 特别强调下&…...

在服务器上增加新网段IP的路由配置

在服务器上增加新网段IP的路由配置 前提条件步骤一:检查当前路由表步骤二:添加新路由步骤三:验证新路由步骤四:持久化路由配置脚本示例结论在网络管理中,路由配置是一项基本且重要的任务。它决定了数据包在网络中的传输路径。本文将详细介绍如何在服务器上增加新的路由配置…...

2Spark Core

2Spark Core 1.RDD 详解1) 为什么要有 RDD?2) RDD 是什么?3) RDD 主要属性 2.RDD-API1) RDD 的创建方式2) RDD 的算子分类3) Transformation 转换算子4) Action 动作算子 3. RDD 的持久化/缓存4. RDD 容错机制 Checkpoint5. RDD 依赖关系1) 宽窄依赖2) 为什么要设计宽窄依赖 …...

【ANGULAR网站开发】初始环境搭建(SpringBoot)

1. 初始化SpringBoot 1.1 创建SpringBoot项目 清理spring-boot-starter-test&#xff0c;有需要的可以留着 1.2 application.properties 将application.properties改为yaml&#xff0c;个人习惯问题&#xff0c;顺便设置端口8888&#xff0c;和前端设置的一样 server:por…...

Vue 页面布局组件-Vuetify、Semantic

在现代 Web 开发中&#xff0c;用户体验是关键&#xff0c;尤其是当我们利用 Vue.js 框架构建用户友好的界面时。今天&#xff0c;我们将深入探讨如何使用 Vuetify 和 Semantic UI 来创建高效、美观的页面布局组件。通过这项技术&#xff0c;你将能够为用户呈现一个流畅的交互体…...

小程序组件 —— 31 事件系统 - 事件绑定和事件对象

小程序中绑定事件和网页开发中绑定事件几乎一致&#xff0c;只不过在小程序不能通过 on 的方式绑定事件&#xff0c;也没有 click 等事件&#xff0c;小程序中绑定事件使用 bind 方法&#xff0c;click 事件也需要使用 tap 事件来进行代替&#xff0c;绑定事件的方式有两种&…...

23种设计模式

23种设计模式 创建型模式&#xff08;Creational Patterns&#xff09;结构型模式&#xff08;Structural Patterns&#xff09;行为型模式&#xff08;Behavioral Patterns&#xff09;总结 Java中的设计模式是解决特定问题的通用、可复用的解决方案。它们不是完成代码&#x…...

SIBR详细介绍:基于图像的渲染系统及3DGS实例展示【3DGS实验复现】

文章目录 什么是 SIBR&#xff1f;IBR 技术的优势SIBR 的核心组件SIBR 的应用场景如何使用 SIBR&#xff1f;3D Gaussian Splatting 实验实例展示1. 什么是 3D Gaussian Splatting (3DGS)&#xff1f;2. 实验运行环境步骤&#xff1a;简要说明如何使用 3DGS 的两种渲染方式 3. …...

每天五分钟深度学习框架pytorch:基于vgg块搭建VGG卷积神经网络

本文重点 前面我们使用pytorch搭建了vgg块,本文我们使用vgg块搭建卷积神经网络VGG16,我们先来看一下vgg16的模型结构是什么样的: 搭建vgg16 import torch from torch import nn def vgg_block(num_convs,in_channels,out_channels): net=[nn.Conv2d(in_channels,out_channe…...

【gin】中间件使用之jwt身份认证和Cors跨域,go案例

Gin-3 中间件编程及 JWT 身份认证 1. Gin 中间件概述 中间件是处理 HTTP 请求的函数&#xff0c;可以在请求到达路由处理函数之前或之后对请求进行处理。 在 Gin 框架中&#xff0c;中间件常用于处理日志记录、身份验证、权限控制等功能。 router : gin.Default() router.Us…...

探索 Vue.js 组件开发的新边界:动态表单生成技术

随着前端技术的飞速发展&#xff0c;Vue.js 作为一款灵活、易用且性能优异的框架&#xff0c;一直是开发者心中的不二之选。本文将深入介绍 Vue.js 组件开发中的最新技术之一&#xff1a;动态表单生成技术&#xff0c;并通过具体实例展示如何实现这一高效技术。 为什么选择动态…...

Android 调用系统服务接口获取屏幕投影(需要android.uid.system)

媒体投影 借助 Android 5&#xff08;API 级别 21&#xff09;中引入的 android.media.projection API&#xff0c;您可以将设备屏幕中的内容截取为可播放、录制或投屏到其他设备&#xff08;如电视&#xff09;的媒体流。 Android 14&#xff08;API 级别 34&#xff09;引入…...

Node.js - Express框架

1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架&#xff0c;主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一&#xff0c;具有轻量级、灵活和功能丰富的特点。 核心概念包括路由&#xff0c;中间件&#xff0c;请求与响应&a…...

Picocli 命令行框架

官方文档 https://picocli.info/ 官方提供的快速入门教程 https://picocli.info/quick-guide.html 使用 Picocli 创建命令行应用程序 Picocli 是一个用于构建 Java 命令行应用的强大框架&#xff0c;它简化了参数解析和帮助消息生成的过程。 下面是如何使用 Picocli 构建简单命…...

Vscode——SSH连接不上的一种解决办法

一、完整报错: > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! > Someone could be eavesdropping on you right now (man-in-the...

Stream流

一 : Stream流的介绍 stream不存储数据&#xff0c;而是按照特定的规则对数据进行计算&#xff0c;一般会输出结果&#xff1b; stream不会改变数据源&#xff0c;通常情况下会产生一个新的集合&#xff1b; stream具有延迟执行特性&#xff0c;只有调用终端操作时&#xff…...

开源文件存储分享平台Seafile部署与应用

Seafile 是一款开源的企业云盘,注重可靠性和性能,支持全平台客户端。Seafile 内置协同文档 SeaDoc ,让协作撰写、管理和发布文档更便捷。适用于团队协作、文件存储和同步的开源解决方案,它提供了可靠、安全和易用的云存储服务。主要有以下特点: 文件存储和同步:Seafile 允…...

RAG技术:是将知识库的文档和问题共同输入到LLM中

RAG技术 RAG技术是将知识库的文档和问题共同输入到LLM中 RAG技术是先从知识库中检索出与问题相关的文档片段,然后将这些检索到的文档片段与问题一起输入到LLM中进行回答。具体过程如下: 文本分块 由于LLM的上下文窗口有限,需要将长文本资料分割成较小的块,以便LLM能够有…...

战略与规划方法——深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具

深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具 在现代商业管理中,合理地分析和管理产品组合对于企业的成功至关重要。波士顿矩阵(BCG Matrix),又称为成长份额矩阵,是一种由波士顿咨询集团(Boston Consulting Group)在20世纪70年代提出的战略工具,用于帮助…...

GORM(Go语言数据交互库)

GORM&#xff08;Go ORM&#xff0c;即对象关系映射&#xff09;是Go语言中非常流行且功能强大的数据库交互库。它简化了与关系型数据库的交互过程&#xff0c;提供了丰富的API来处理各种数据库操作。下面将详细介绍GORM的功能、使用方法和一些高级特性。 1. 安装 首先&#…...

Spring Boot教程之五十七:在 Apache Kafka 上发布 JSON 消息

Spring Boot | 如何在 Apache Kafka 上发布 JSON 消息 Apache Kafka是一个发布-订阅消息系统。消息队列允许您在进程、应用程序和服务器之间发送消息。在本文中&#xff0c;我们将了解如何在 Spring Boot 应用程序中向 Apache Kafka 发送 JSON 消息。 为了了解如何创建 Spring…...

开发指南091-延迟退休算法

公布平台上人力资源系统有关延迟退休算法&#xff1a; package org.qlm.util;public class busiUtil {/*birthYearMonth 出生年月 yyyy-MMmode 0 男职工 1 女干部 2 女职工*/public static String calculateRetirementDate(String birthYearMonth, String mode){if ("0&…...

Flask-SQLAlchemy 基于一个base表 - 动态创建使用相同字段的其他业务表

1 安装 首先&#xff0c;确保您安装了 Flask 和 SQLAlchemy&#xff0c;以及 MySQL 的驱动程序&#xff08;例如 mysql-connector-python 或 PyMySQL&#xff09;&#xff1a; pip install Flask Flask-SQLAlchemy mysql-connector-python2 创建项目结构 创建一个简单的项目…...

数据结构--二叉树

目录 有序二叉树&#xff1a; 平衡二叉树&#xff1a; 234树&#xff1a; 红黑树 红黑树特点&#xff1a; 为什么红黑树是最优二叉树&#xff1f; 哈夫曼树和哈夫曼编码 有序二叉树&#xff1a; 平衡二叉树&#xff1a; 在有序二叉树的基础上得来的&#xff0c;且左右子…...

【编译构建】用cmake编译libjpeg动态库并实现转灰度图片

先编译出libjepg动态库 1、下载libjpeg源码: https://github.com/libjpeg-turbo/libjpeg-turbo 2、编译出动态库或静态库 写一个编译脚本&#xff0c;用cmake构建。 #!/bin/bash# 定义变量 SOURCE_DIR"/home/user/libjpeg-turbo-main" BUILD_DIR"${SOURCE_…...

vLLM私有化部署大语言模型LLM

目录 一、vLLM介绍 二、安装vLLM 1、安装环境 2、安装步骤 三、运行vLLM 1、运行方式 2、切换模型下载源 3、运行本地已下载模型 四、通过http访问vLLM 一、vLLM介绍 vLLM&#xff08;官方网址&#xff1a;https://www.vllm.ai&#xff09;是一种用于大规模语言模型&#x…...

人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用。近日&#xff0c;演员王星因接到一份看似来自知名公司的拍戏邀约&#xff0c;被骗至泰国并最终被带到缅甸。这一事件迅速引发了社会的广泛关注。该…...

ESP-IDF学习记录(5) 画一块esp32-c3 PCB板

最近看了半个多月&#xff0c;趁着嘉立创官方活动&#xff0c;研究esp32-c3规格书&#xff0c;白嫖PCB 和元器件。原本计划按照官方推荐的搞个四层板&#xff0c;结果打样太贵&#xff0c;火速改成双层板&#xff0c;用了官方的券。小于10*10,也可以使用嘉立创的免费打样。 下面…...

Day04-后端Web基础——Maven基础

目录 Maven课程内容1. Maven初识1.1 什么是Maven?1.2 Maven的作用1.2.1 依赖管理1.2.2 项目构建1.2.3 统一项目结构 2. Maven概述2.1 Maven介绍2.2 Maven模型2.2.1 构建生命周期/阶段(Build lifecycle & phases)2.2.2 项目对象模型 (Project Object Model)2.2.3 依赖管理模…...

ASP.NET Core - 日志记录系统(一)

ASP.NET Core - 日志记录系统&#xff08;一&#xff09; 一、日志记录二、ASP.Net Core 的日志记录2.1. 日志记录系统的接入2.2 记录日志2.3 基本配置2.3.1 日志级别2.3.2 全局输出配置2.3.3 针对特定日志提供程序的配置2.3.6 显式设置2.3.4 配置筛选原理2.3.5 日志作用域 一、…...

Linux 各个服务启动命令

目录 redis后台启动rocketMq后台启动mongodb后台启动mysql后台启动 redis后台启动 ./redis-server ./redis.confrocketMq后台启动 #关闭Nameserver sh bin/mqshutdown namesrv #关闭Broker sh bin/mqshutdown broker #启动namesrv nohup sh bin/mqnamesrv -n 127.0.0.1:9876 …...

24-25-1-单片机开卷部分习题和评分标准

依据相关规定试卷必须按评分标准进行批改。 给分一定是宽松的&#xff0c;能给分一定给&#xff0c;如有疑问也可以向学院教务办申请查卷。 一部分学生期末成绩由于紧张或其他原因导致分数过低&#xff0c;也是非常非常遗憾的。 个人也是非常抱歉的。 开卷考试 简答题 第一…...

Apache Hop从入门到精通 第二课 Apache Hop 核心概念/术语

1、apache hop核心概念思维导图 虽然apache hop是kettle的一个分支&#xff0c;但是它的概念和kettle还是有一些区别的&#xff0c;下图是我根据官方文档梳理的appache hop的核心概念思维导图。 2、Tools&#xff08;工具&#xff09; 1&#xff09;Hop Conf Hop Conf 是一个…...

网络安全 | Web安全常见漏洞和防护经验策略

关注&#xff1a;CodingTechWork 引言 OWASP (Open Web Application Security Project) Top 10是Web应用最常见的安全风险集合&#xff0c;帮助开发人员和安全专家识别和防止最严重的网络安全问题。以下是基于OWASP Top 10的Web安全防护经验策略与规则集。Web开发者必须对潜在…...

Unity 3D游戏开发从入门进阶到高级

本文精心整理了Unity3D游戏开发相关的学习资料&#xff0c;涵盖入门、进阶、性能优化、面试和书籍等多个维度&#xff0c;旨在为Unity开发者提供全方位、高含金量的学习指南.欢迎收藏。 学习社区 Unity3D开发者 这是一个专注于Unity引擎的开发者社区&#xff0c;汇聚了众多Un…...

浅谈云计算14 | 云存储技术

云存储技术 一、云计算网络存储技术基础1.1 网络存储的基本概念1.2云存储系统结构模型1.1.1 存储层1.1.2 基础管理层1.1.3 应用接口层1.1.4 访问层 1.2 网络存储技术分类 二、云计算网络存储技术特点2.1 超大规模与高可扩展性2.1.1 存储规模优势2.1.2 动态扩展机制 2.2 高可用性…...

No.1|Godot|俄罗斯方块复刻|棋盘和初始方块的设置

删掉基础图标新建assets、scenes、scripts文件夹 俄罗斯方块的每种方块都是由四个小方块组成的&#xff0c;很适合放在网格地图中 比如网格地图是宽10列&#xff0c;高20行 要实现网格的对齐和下落 Node2D节点 新建一个Node2D 添加2个TileMapLayer 一个命名为Board&…...

二 RK3568 固件中打开 ADB 调试

一 usb adb Android 系统,设置->开发者选项->已连接到计算机 打开,usb调试开关打开 通过 usb otg 口连接 开发上位机 (windows/linux) 上位机安装 adb 服务之后 , 通过 cmd/shell: #1 枚举设备 adb devices #2 进入 android shell adb shell # 3 验证上传下载…...

鸿蒙报错Init keystore failed: keystore password was incorrect

报错如下&#xff1a; > hvigor ERROR: Failed :entry:defaultSignHap... > hvigor ERROR: Tools execution failed. 01-13 16:35:55 ERROR - hap-sign-tool: error: Init keystore failed: keystore password was incorrect * Try the following: > The key stor…...

Java学习笔记(二十三)

1 CacheEvict CacheEvict是Spring框架中用于清空缓存的注解。以下是对CacheEvict注解的详细介绍&#xff1a; 1.1 作用 CacheEvict注解的主要作用是删除缓存中的数据。在方法执行后或执行前&#xff08;根据配置&#xff09;&#xff0c;它可以清空指定的缓存项或整个缓存区…...

TIOBE编程语言排行靠前的编程语言的吉祥物

Python的吉祥物&#xff1a;小蟒蛇 Python语言的吉祥物是一只名叫"Pythonidae"&#xff08;或简称"Py"&#xff09;的小蟒蛇。这个吉祥物由Tobias Kohn设计于2005年&#xff0c;它的形象借鉴了真实的蟒蛇&#xff0c;但加入了一些可爱和友善的特点。小蟒蛇…...

Redis集群部署详解:主从复制、Sentinel哨兵模式与Cluster集群的工作原理与配置

集群部署形式 1、主从复制1.1 工作机制1.2 配置实现1.3 优缺点1.4 部署形式1.5 主从复制优化 2、Sentinel 哨兵模式2.1 工作机制2.2 配置实现2.3 优缺点2.4 哨兵机制选举流程2.5 脑裂问题解决方案 3、Redis Cluster3.1 工作机制3.2 配置实现3.3 优缺点3.4 故障转移3.5 哈希槽为…...