Android Compose 物联网(IoT)UI 组件库封装指南
Android Compose 物联网封装组件
在物联网(IoT)应用开发中,使用Jetpack Compose可以创建现代化、响应式的用户界面。以下是一些针对物联网场景的Compose封装组件思路和实现方法:
常用物联网组件封装
1. 设备状态指示器
@Composable
fun DeviceStatusIndicator(isOnline: Boolean,batteryLevel: Int? = null,signalStrength: Int? = null,modifier: Modifier = Modifier
) {Row(modifier = modifier,verticalAlignment = Alignment.CenterVertically,horizontalArrangement = Arrangement.spacedBy(4.dp)) {// 在线状态Icon(imageVector = if (isOnline) Icons.Filled.CheckCircle else Icons.Filled.Error,contentDescription = null,tint = if (isOnline) Color.Green else Color.Red,modifier = Modifier.size(16.dp)// 电池状态batteryLevel?.let { level ->BatteryIndicator(level = level)}// 信号强度signalStrength?.let { strength ->SignalStrengthIndicator(strength = strength)}}
}@Composable
private fun BatteryIndicator(level: Int) {Box(modifier = Modifier.size(20.dp, 12.dp).border(1.dp, Color.White, RoundedCornerShape(2.dp)).padding(1.dp)) {Box(modifier = Modifier.fillMaxWidth(level / 100f).fillMaxHeight().background(color = when {level < 20 -> Color.Redlevel < 50 -> Color.Yellowelse -> Color.Green},shape = RoundedCornerShape(1.dp)))}
}@Composable
private fun SignalStrengthIndicator(strength: Int) {val bars = when {strength > 75 -> 4strength > 50 -> 3strength > 25 -> 2else -> 1}Row(verticalAlignment = Alignment.Bottom,horizontalArrangement = Arrangement.spacedBy(2.dp)) {repeat(4) { index ->val height = (index + 1) * 4.dpval color = if (index < bars) Color.Green else Color.Gray.copy(alpha = 0.3f)Box(modifier = Modifier.width(3.dp).height(height).background(color, RoundedCornerShape(2.dp)))}}
}
2. 传感器数据图表
@Composable
fun SensorDataChart(dataPoints: List<Float>,modifier: Modifier = Modifier,lineColor: Color = Color.Blue,fillColor: Color = lineColor.copy(alpha = 0.2f)
) {Canvas(modifier = modifier) {if (dataPoints.size < 2) return@Canvasval maxValue = dataPoints.maxOrNull() ?: 0fval minValue = dataPoints.minOrNull() ?: 0fval range = maxValue - minValueval stepX = size.width / (dataPoints.size - 1)// 创建路径val path = Path().apply {moveTo(0f, size.height - (dataPoints[0] - minValue) / range * size.height)dataPoints.forEachIndexed { index, value ->if (index > 0) {val x = index * stepXval y = size.height - (value - minValue) / range * size.heightlineTo(x, y)}}}// 填充路径val fillPath = path.copy()fillPath.lineTo(size.width, size.height)fillPath.lineTo(0f, size.height)fillPath.close()// 绘制drawPath(fillPath, fillColor)drawPath(path, lineColor, style = Stroke(width = 2.dp.toPx()))}
}
3. 设备控制开关
@Composable
fun DeviceToggleSwitch(isOn: Boolean,onToggle: (Boolean) -> Unit,modifier: Modifier = Modifier,enabled: Boolean = true,onColor: Color = Color(0xFF4CAF50),offColor: Color = Color(0xFF9E9E9E),thumbColor: Color = Color.White
) {val animationProgress = animateFloatAsState(targetValue = if (isOn) 1f else 0f,animationSpec = tween(durationMillis = 200))Box(modifier = modifier.width(48.dp).height(24.dp).clip(RoundedCornerShape(12.dp)).background(color = if (enabled) {lerp(offColor, onColor, animationProgress.value)} else {offColor.copy(alpha = 0.5f)}).clickable(enabled = enabled) { onToggle(!isOn) },contentAlignment = Alignment.CenterStart) {Box(modifier = Modifier.offset(x = animationProgress.value * 24.dp).size(20.dp).clip(CircleShape).background(thumbColor).padding(2.dp))}
}
4. 环境数据显示卡
@Composable
fun EnvironmentDataCard(temperature: Float?,humidity: Float?,airQuality: Int?,modifier: Modifier = Modifier
) {Card(modifier = modifier,elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)) {Column(modifier = Modifier.padding(16.dp),verticalArrangement = Arrangement.spacedBy(8.dp)) {Text("环境数据", style = MaterialTheme.typography.titleMedium)temperature?.let {EnvironmentDataItem(icon = Icons.Filled.Thermostat,label = "温度",value = "${it}°C",color = when {it > 30 -> Color.Redit < 10 -> Color.Blueelse -> Color.Green})}humidity?.let {EnvironmentDataItem(icon = Icons.Filled.WaterDrop,label = "湿度",value = "${it}%",color = when {it > 80 -> Color.Blueit < 30 -> Color.Redelse -> Color.Green})}airQuality?.let {EnvironmentDataItem(icon = Icons.Filled.Air,label = "空气质量",value = when {it < 50 -> "优"it < 100 -> "良"it < 150 -> "轻度污染"it < 200 -> "中度污染"else -> "重度污染"},color = when {it < 50 -> Color.Greenit < 100 -> Color(0xFFCDDC39)it < 150 -> Color(0xFFFF9800)it < 200 -> Color(0xFFF44336)else -> Color(0xFF9C27B0)})}}}
}@Composable
private fun EnvironmentDataItem(icon: ImageVector,label: String,value: String,color: Color,modifier: Modifier = Modifier
) {Row(modifier = modifier,verticalAlignment = Alignment.CenterVertically,horizontalArrangement = Arrangement.spacedBy(8.dp)) {Icon(imageVector = icon,contentDescription = null,tint = color,modifier = Modifier.size(20.dp))Text(text = label, style = MaterialTheme.typography.bodyMedium)Spacer(modifier = Modifier.weight(1f))Text(text = value,style = MaterialTheme.typography.bodyLarge.copy(fontWeight = FontWeight.Bold),color = color)}
}
物联网特定功能组件
1. 设备发现列表
@Composable
fun DeviceDiscoveryList(devices: List<DiscoveredDevice>,onDeviceSelected: (DiscoveredDevice) -> Unit,modifier: Modifier = Modifier,isDiscovering: Boolean = false
) {Column(modifier = modifier) {if (isDiscovering) {LinearProgressIndicator(modifier = Modifier.fillMaxWidth())Spacer(modifier = Modifier.height(8.dp))}LazyColumn {items(devices) { device ->DeviceDiscoveryItem(device = device,onClick = { onDeviceSelected(device) },modifier = Modifier.fillMaxWidth())}}}
}@Composable
fun DeviceDiscoveryItem(device: DiscoveredDevice,onClick: () -> Unit,modifier: Modifier = Modifier
) {Card(modifier = modifier.padding(8.dp),onClick = onClick) {Row(modifier = Modifier.padding(16.dp),verticalAlignment = Alignment.CenterVertically,horizontalArrangement = Arrangement.spacedBy(16.dp)) {Icon(imageVector = when (device.type) {DeviceType.THERMOSTAT -> Icons.Filled.ThermostatDeviceType.LIGHT -> Icons.Filled.LightbulbDeviceType.SENSOR -> Icons.Filled.Sensorselse -> Icons.Filled.DevicesOther},contentDescription = null,modifier = Modifier.size(32.dp)Column(modifier = Modifier.weight(1f)) {Text(text = device.name,style = MaterialTheme.typography.titleMedium)Text(text = device.address,style = MaterialTheme.typography.bodySmall,color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f))}Icon(imageVector = Icons.Filled.ChevronRight,contentDescription = "连接",tint = MaterialTheme.colorScheme.primary)}}
}
2. 连接状态指示器
@Composable
fun ConnectionStatusIndicator(connectionState: ConnectionState,onRetry: () -> Unit,modifier: Modifier = Modifier
) {val (text, icon, color) = when (connectionState) {ConnectionState.CONNECTED -> Triple("已连接", Icons.Filled.CheckCircle, Color.Green)ConnectionState.CONNECTING -> Triple("连接中...", Icons.Filled.Refresh, Color(0xFFFFA000))ConnectionState.DISCONNECTED -> Triple("已断开", Icons.Filled.Error, Color.Red)ConnectionState.ERROR -> Triple("连接错误", Icons.Filled.Warning, Color.Red)}Row(modifier = modifier,verticalAlignment = Alignment.CenterVertically,horizontalArrangement = Arrangement.spacedBy(8.dp)) {Icon(imageVector = icon,contentDescription = null,tint = color,modifier = Modifier.size(20.dp))Text(text = text, color = color)if (connectionState == ConnectionState.ERROR || connectionState == ConnectionState.DISCONNECTED) {TextButton(onClick = onRetry) {Text("重试")}}}
}
最佳实践建议
- 状态管理:对于物联网应用,建议使用ViewModel管理设备状态和数据流
- 实时更新:使用Flow或LiveData将设备数据传递到Compose界面
- 错误处理:为所有设备操作添加适当的错误处理和重试机制
- 性能优化:对于高频传感器数据,考虑降低UI更新频率或使用性能优化的图表库
- 主题一致性:遵循Material Design指南,确保界面一致性
示例ViewModel
class IoTDeviceViewModel : ViewModel() {private val _connectionState = mutableStateOf(ConnectionState.DISCONNECTED)val connectionState: State<ConnectionState> = _connectionStateprivate val _temperature = mutableStateOf<Float?>(null)val temperature: State<Float?> = _temperatureprivate val _humidity = mutableStateOf<Float?>(null)val humidity: State<Float?> = _humidityprivate val deviceManager = IoTDeviceManager()init {viewModelScope.launch {deviceManager.connectionState.collect { state ->_connectionState.value = state}}viewModelScope.launch {deviceManager.temperatureFlow.collect { temp ->_temperature.value = temp}}viewModelScope.launch {deviceManager.humidityFlow.collect { hum ->_humidity.value = hum}}}fun connectDevice(deviceId: String) {viewModelScope.launch {try {deviceManager.connect(deviceId)} catch (e: Exception) {_connectionState.value = ConnectionState.ERROR}}}fun disconnectDevice() {deviceManager.disconnect()}
}enum class ConnectionState {CONNECTED, CONNECTING, DISCONNECTED, ERROR
}
这些组件可以根据具体的物联网应用需求进行扩展和定制,为物联网应用开发提供高效、美观的UI解决方案。
相关文章:
Android Compose 物联网(IoT)UI 组件库封装指南
Android Compose 物联网封装组件 在物联网(IoT)应用开发中,使用Jetpack Compose可以创建现代化、响应式的用户界面。以下是一些针对物联网场景的Compose封装组件思路和实现方法: 常用物联网组件封装 1. 设备状态指示器 Composable fun DeviceStatusI…...
实用在线工具箱OmniTools
简介 OmniTools 是一个自托管的网络应用,提供多种在线工具,旨在简化日常任务。它包含了一系列独立的、小型但实用的工具,涵盖了文件处理、文本操作、网络请求、系统监控等多个方面。 OmniTools 的设计理念是简单、易用、可定制,方…...
【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用。
【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用? 【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用&…...
数字化转型进阶:26页华为数字化转型实践分享【附全文阅读】
本文分享了华为数字化转型的实践经验和体会。华为通过数字化变革,致力于在客户服务、供应链、产品管理等方面提高效率,并把数字世界带入每个组织,构建万物互联的智能世界。华为的数字化转型愿景是成为行业标杆,通过推进数字化战略、构建面向业务数字化转型的IT组织阵型、坚…...
Go语言的优势与应用场景 -《Go语言实战指南》
一、 Go语言的五大核心优势 1. 语法简洁,开发高效 Go语言借鉴了C语言的表达方式,但去掉了多余复杂的特性(如继承、多态、异常处理等),语法风格清晰明了,极大地降低了学习成本: • 无需头文件…...
3D人物关系图开发实战:Three.js实现自动旋转可视化图谱(附完整代码)
3D人物关系图开发实战:Three.js实现自动旋转可视化图谱 效果核心解析场景初始化自动旋转控制器节点创建(带图片和标签)关系连线动画循环数据格式说明 代码 效果 本文将带您使用Three.js实现一个带自动旋转功能的3D人物关系图谱,核…...
文件操作-
1. 为什么使⽤⽂件? 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化…...
硬件零基础入门(尚硅谷)
1 一个碳原子有一个自由电子。所以能够导电。 金刚石四个都是都弄成共价键了,所以没有自由电子不能自由电子。 2 新的电子进来,因为互斥电荷进行了定向运动,产生了能量。两边电子平衡就停止了。所以电池的负极有电子。 电荷就是质子和电…...
【Ai零件】高德开放平台MCP的API-key注册
前言 基本操作文档,为n8n等平台,调用高德MCP服务做准备,本文记录其API-Key的生成步骤。 操作步骤 高德开发平台官网:https://lbs.amap.com/ 完成后,进入控制台界面: 创建新应用 进入【应用管理】,点击页…...
安卓基础(startActivityForResult和onActivityResult)
onActivityResult 方法有三个参数: requestCode:启动 Activity 时传入的请求码,用于区分不同的启动请求。resultCode:返回结果的状态码,通常为 RESULT_OK 或 RESULT_CANCELED。data:一个 Intent 对象&…...
安卓基础(悬浮窗)
悬浮窗 import android.app.Service; import android.content.Context; import android.graphics.PixelFormat; import android.os.IBinder; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager…...
《windows GCC 版本升级到9以上》
《windows GCC 版本升级到9以上》 在 Windows 系统上升级 GCC 到 9 以上版本通常有两种主流方案:MinGW-w64 和 WSL(Windows Subsystem for Linux)。以下是具体操作步骤: 方案一:使用 MinGW-w64(原生 Windows 环境) 步骤 1:安装 MSYS2 MSYS2 是 Windows 上的软件分发…...
LeetCode —— 102. 二叉树的层序遍历
😶🌫️😶🌫️😶🌫️😶🌫️Take your time ! 😶🌫️😶🌫️😶🌫️😶🌫️…...
Python面向对象编程实战:从类定义到高级特性的进阶之旅(2/10)
摘要:本文介绍面向对象编程基础概念,包括类与对象、封装、继承和多态等。以Python语言为例,详细讲述了类的定义与使用、构造函数与析构函数、类的访问控制等。面向对象编程通过将数据和操作封装在一起,提高代码的模块化和可维护性…...
【AI论文】DeepCritic:使用大型语言模型进行有意识的批判
摘要:随着大型语言模型(LLMs)的快速发展,对其输出提供准确的反馈和可扩展的监督成为一个紧迫而关键的问题。 利用LLM作为评判模型来实现自动化监督是一种有前景的解决方案。 在这项工作中,我们专注于研究和提高LLM的数…...
硬件工程师面试常见问题(12)
第五十六问:PCI总线基本知识 关于PCI总线的描述,错误的是:(A)(4分) A.PCI总线是一个16位宽的总线。 B.PCI的地址线与数据线是复用的。 C.PCI是一种独立于处理器的总线标准,可以支持多种处理器。 D.PCI支持即插即用功能。 解释: …...
大数据Spark(五十八):Spark Pi介绍
文章目录 Spark Pi介绍 Spark Pi介绍 Spark Pi是Apache Spark官方提供的一个示例程序,该案例使用 Spark 进行分布式计算,通过蒙特卡罗方法估算圆周率(π)的值,其估算π原理如下: 上图中,正方形…...
深入理解 HttpExchange_Java 中构建 HTTP 服务的基础组件
1. 引言 1.1 Java 中的轻量级 HTTP 服务需求 随着微服务、工具类应用和嵌入式系统的兴起,开发者对轻量级 HTTP 服务的需求日益增长。相比引入庞大的框架(如 Spring Boot),使用 JDK 原生 API 构建 HTTP 服务成为一种快速、低依赖的替代方案。 JDK 提供了 com.sun.net.htt…...
MaC QT 槽函数和Lambda表达式
在C Qt框架中,槽函数(Slot)是一种特殊的成员函数,用于响应信号(Signal)的触发,从而实现对象间的通信和事件处理。 #include<QMessageBox>//包含槽函数的头文件 //定义槽函数 响应特定的信…...
JMM 与 JVM 运行时数据区有什么区别和联系?
JMM(Java Memory Model)和 JVM 运行时数据区(JVM Runtime Data Areas)是 Java 内存管理中的两个不同但密切相关的概念。 1. JVM 运行时数据区 (JVM Runtime Data Areas) 是什么? JVM 运行时数据区是 JVM 在程序执行过程…...
LeetCode Hot100题解
目录 一、数组 & 字符串 1. 两数之和(简单) 2. 删除有序数组中的重复项(简单) 3. 移除元素(简单) 4. 合并两个有序数组(简单) 5. 买卖股票的最佳时机(简单&…...
基于Jenkins的DevOps工程实践之Jenkins共享库
文章目录 前言Jenkins共享库结构1、共享库演示2、知识点补充3、实践使用共享库格式化输出日志4、groovy基础语法4.1、 什么是 Groovy?4.2、groovy特点4.3、运行方法4.4、标识符4.5、基本数据类型4.5.1、string类型4.5.2、list类型 4.6、函数使用4.7、正则表达式 5、…...
【安装指南】Docker 安装最新版 Nginx 并进行项目的编排
目录 一、Nginx 的介绍 1.1 开源版 Nginx ① 访问路由 ② 反向代理 ③ 负载均衡 ④ 内容缓存 ⑤ 可编程 1.2 商业版 Nginx Plus ① 负载均衡 ② 动态管理 ③ 安全控制 ④ 状态监控 ⑤ Kubernetes Ingress Controller ⑥ 流媒体 1.3 扩…...
MFC自定义控件开发与使用指南
MFC自定义控件开发与使用指南 1. 概述 MFC(Microsoft Foundation Classes)框架提供了丰富的内置控件,但在实际开发中,我们常常需要创建自定义控件来满足特定的界面需求。本文将详细介绍如何在MFC中开发自定义控件,并以CCustomTextControl为例,展示自定义控件的实现和使…...
Learning vtkjs之PolyDataNormals
法线可视化 介绍 polydata法线可视化 效果 核心代码 主要流程 const fullScreenRenderer vtkFullScreenRenderWindow.newInstance({background: [0, 0, 0],rootContainer: vtkContainerRef.current,});const renderer fullScreenRenderer.getRenderer();const renderWind…...
DeepSeek辅助学术写作之提交和出版以及评审过程分析提示词分享祝你顺利毕业~
目录 1.提交和出版 2.评审过程 大家好这里是AIWritePaper官方账号,官网👉AIWritePaper~ 宝子们可以使用小编精选的“ChatGPT研究论文提示词”集合来创建研究论文。利用DeepSeek的智能回应生成详尽有效的内容,这样可以加快研究论文的策划、创…...
基于机器学习的心脏病数据分析与可视化(百度智能云千帆AI+DeepSeek人工智能+机器学习)健康预测、风险评估与数据可视化 健康管理平台 数据分析与处理
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
Kubernetes(k8s)学习笔记(四)--入门基本操作
本文通过kubernetes部署tomcat集群,来学习和掌握kubernetes的一些入门基本操作 前提条件 1.各个节点处于Ready状态; 2.配置好docker镜像库(否则会出现ImagePullBackOff等一些问题); 3.网络配置正常(否则即使应用发布没问题,浏…...
在Java项目中实现本地语音识别与热点检测,并集成阿里云智能语音服务
引言 随着语音交互技术的发展,如何高效地处理用户的语音输入成为许多应用的重要课题。本文将详细介绍如何在一个Java项目中同时实现: 基于Vosk的本地语音识别:无需调用云端API即可完成语音到文本的转换。本地热点语音内容识别:对…...
C++八股--5--设计模式--适配器模式,代理模式,观察者模式
3. 观察者模式(也叫做观察者-监听者模式,发布-订阅模式) 主要关注对象的一对多关系,也就是多个对象都依赖于一个对象,当该对象状态改变时,其余对象都能得到对应的通知 如:一组数据(数…...
Ubuntu下安装Node.js
一、引言 Ubuntu下安装Node.js主要有两种方式:通过apt安装和通过源码安装。本文主要讲解通过apt安装Node.js的方法。 二、通过apt安装Node.js 安装Node.js: apt install nodejs 我之前已经安装过了,所以提示:“nodejs 已经是最…...
用单目相机和apriltag二维码aruco实现单目定位
目录 一、核心流程与代码框架 1. 环境准备 2. ArUco定位实现 3. AprilTag定位实现(需额外安装Apriltag库) 二、关键优化点 1.亚像素角点优化 2 多标签联合定位 三、性能指标(实测) 四、常见问题 检测失败…...
AIGC算力消耗白皮书:Stable Diffusion vs Midjourney的架构成本差异
引言:文生图模型的算力经济学悖论 当Midjourney单日处理超过4000万张图像请求时,其云服务算力成本却低于Stable Diffusion开源方案的37%。这揭示了一个核心矛盾:开源模型的架构自由度与闭源系统的商业优化之间存在根本性博弈。本文基于H800 …...
介绍 PHP-FPM 和 Python WSGI
我来详细介绍 PHP-FPM 和 Python WSGI,它们是现代Web开发中替代传统CGI的高性能解决方案,分别针对PHP和Python优化。 1. PHP-FPM(FastCGI Process Manager) 是什么? PHP-FPM 是PHP的 FastCGI 进程管理器,…...
赛季7靶场 -- Checker --User flag
本系列仅说明靶场的攻击思路,不会给出任何的详细代码执行步骤,因为个人觉得找到合适的工具以实现攻击思路的能力也非常重要。root要逆向,没做了,但是user flag也有借鉴意义,关于2FA的绕过我们有必要了解 1.首先Nmap扫描…...
【c语言】数据在内存中的存储
一、 大小端字节序 大端字节序:数据的低字节内容存放在内存的高地址处,数据的高字节内容存放在内存的低地址处,对于0x11223344 小端字节序:数据的低字节内容存放在内存的低地址处,数据的高字节内容存放在内存的高地…...
【Unity】XLua访问C#文件
创建NPC.cs: public class NPC { public string name; public int age; public void Say() { Debug.Log("Say:我是未被修改的"); } public static void Say() { Debug.Log("Static Say:我是未被修改的"); } public void Say2(int a) { Debug.Lo…...
Python实例题:Python获取房天下数据
目录 Python实例题 题目 实现思路 代码实现 代码解释 get_fangtianxia_data 函数: 主程序: 运行思路 注意事项 Python实例题 题目 Python获取房天下数据 实现思路 请求网页:使用 requests 库向房天下二手房页面发送请求…...
Milvus(12):分析器
1 分析器概述 在文本处理中,分析器是将原始文本转换为结构化可搜索格式的关键组件。每个分析器通常由两个核心部件组成:标记器和过滤器。它们共同将输入文本转换为标记,完善这些标记,并为高效索引和检索做好准备。 在 Milvus 中&a…...
小程序滚动条隐藏(uniapp版本)
单独指定页面隐藏(找到对应的scroll-view) <style> /* 全局隐藏滚动条样式 */ ::-webkit-scrollbar { display: none; width: 0; height: 0; color: transparent; background: transparent; } /* 确保scroll-view组件也隐藏滚动条 */ …...
在 Trae CN IDE 中配置 Python 3.11的指南
在 Trae CN IDE 中配置 Python 3.11的指南 下载 python 3.11 安装 Python 3.11 首先,我们需要确保安装了 Python 3.11。可以从Python 官方网站下载适合你操作系统的版本。 链接 如果你已经安装了 Python 3.11,可以通过以下命令确认: 文…...
AI 大模型常见面试题(及内容解析)
大模型领域包含许多专业术语,以下是一些关键术语的解释: 人工智能(AI):是指使计算机系统能够模拟人类智能行为,以执行任务、解决问题和学习的科学和技术。 大型语言模型(LLM)&#…...
QT —— QWidget(1)
QT —— QWidget(1) QWidget是啥通俗解释:QWidget 是什么?1. QWidget 能干什么?2. 举个栗子 🌰3. QWidget 的特点4. 和“控件”是什么关系?5. 什么时候用 QWidget?6. 总结 QWidget 核…...
with的用法
Python SQLite 操作详解 本文档详细解释了使用 Python 操作 SQLite 数据库时涉及的关键概念和代码实践,包括 with 语句、事务处理、批量插入以及相关的优化建议。 一、with 语句的作用(自动关门的保险库) with sqlite3.connect(city_1301.d…...
Go反射-通过反射调用结构体的方法(带入参)
使用反射前,我们需要提前做好映射配置 papckage_struct_relationship.go package reflectcommonimport (api "template/api" )// 包名到包对象的映射 var structMap map[string]func() interface{}{"template/api": func() interface{} { re…...
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 19)
🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 二…...
使用 Selenium 爬取动态网页数据 —— 实战与坑点详解
本文记录了笔者在爬取网页数据过程中遇到的各种技术挑战,包括页面动态渲染、JavaScript 注入等问题,并最终给出一个可运行的完整方案。 文章目录 网页获取不到数据🚀 尝试用 Selenium 渲染页面 网页获取不到数据 某网页数据依赖大量 JavaSc…...
强化学习--2.数学
强化学习--数学 1、概率统计知识1.1 随机变量与观测值1.2 概率密度函数(PDF)1.3 期望1.4 随机抽样 2、数据期望E3、正态分布4、条件概率1. **与多个条件相关**(依赖所有前置条件)2. **仅与上一个条件相关**(马尔可夫性…...
rails 8 CSS不起效问题解决
很久没用rails了,最近打算重新复习一下。在配置好环境后,创建了项目,通过脚手架创建了数据库表,和相关的文件。但我发现却没有生成相应的CSS文件,可能是rails8 取消了吧。于是自己手动创建了相应的css文件。但是刷新页…...
双指针算法详解(含力扣和蓝桥杯例题)
目录 一、双指针算法核心概念 二、常用的双指针类型: 2.1 对撞指针 例题1:盛最多水的容器 例题2:神奇的数组 2.2 快慢指针: 例题1:移动零 例题2:美丽的区间(蓝桥OJ1372) 3.总…...