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

QML与C++:基于ListView调用外部模型进行增删改查(附自定义组件)

目录

    • 引言
    • 相关阅读
    • 项目结构
      • 文件组织
    • 核心技术实现
      • 1. 数据模型设计
        • 联系人项目类 (datamodel.h)
        • 数据模型类 (datamodel.h)
        • 数据模型实现 (datamodel.cpp)
      • 2. 主程序入口点 (main.cpp)
      • 3. 主界面设计 (Main.qml)
      • 4. 联系人对话框 (ContactDialog.qml)
      • 5. 自定义组件
        • CustomTextField.qml
        • CustomButton.qml
        • IconButton.qml
    • 运行效果
    • 总结
    • 下载链接

引言

在上一篇中介绍了ListView的数据交互与样式定制后,本文上一点强度,将通过一个联系人管理的案例,详细介绍如何使用QML与C++进行混合开发,充分展示QML的界面设计优势和C++的数据处理能力。该应用基于ListView & Model实现了联系人的增删改查等基本功能,并通过自定义组件提升了用户体验。由于篇幅有限,会省略部分代码,完整代码请看本文最后的下载链接。

下一篇与ListView有关的文章,我将会进一步优化Model的性能。到时候在相关阅读中补上链接。

相关阅读

  • 接上篇 —— QML ListView:列表视图的数据交互与样式定制

项目结构

以下是本项目的核心结构图:

main.cpp
DataModel类
QML引擎
Main.qml
ContactDialog.qml
自定义组件
CustomTextField.qml
CustomButton.qml
IconButton.qml

文件组织

qml_listview_cpp/
├── CMakeLists.txt           # CMake构建配置
├── main.cpp                 # C++主函数
├── datamodel.h              # 数据模型头文件
├── datamodel.cpp            # 数据模型实现
├── Main.qml                 # 主界面QML
├── ContactDialog.qml        # 联系人对话框QML
├── components/              # 自定义组件目录
│   ├── CustomTextField.qml  # 自定义文本输入框
│   ├── CustomButton.qml     # 自定义按钮
│   └── IconButton.qml       # 自定义图标按钮
├── icons/                   # 图标资源目录
│   ├── user.png             # 用户图标
│   ├── add.png              # 添加图标
│   ├── delete.png           # 删除图标
│   ├── edit.png             # 编辑图标
│   ├── find.png             # 搜索图标
│   ├── phone.png            # 电话图标
│   └── clear.png            # 清除图标
└── image.qrc                # Qt资源文件

核心技术实现

1. 数据模型设计

本项目采用了QAbstractListModel作为基类创建自定义数据模型,实现了联系人数据的管理。C++的数据模型为QML提供了高效的数据源。

联系人项目类 (datamodel.h)
class ContactItem {
public:ContactItem(const QString &name, const QString &phone): m_name(name), m_phone(phone) {}QString name() const { return m_name; }QString phone() const { return m_phone; }QString firstLetter() const { return m_name.isEmpty() ? "?" : m_name.left(1).toUpper(); }private:QString m_name;QString m_phone;
};

ContactItem类定义了联系人的基本属性:姓名和电话。它还提供了一个便利方法firstLetter()用于获取姓名的首字母,这将用于UI中的头像显示。

数据模型类 (datamodel.h)
class DataModel : public QAbstractListModel
{Q_OBJECTpublic:enum Roles {NameRole = Qt::UserRole + 1,PhoneRole,FirstLetterRole};explicit DataModel(QObject *parent = nullptr);int rowCount(const QModelIndex &parent = QModelIndex()) const override;QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;QHash<int, QByteArray> roleNames() const override;// 暴露给QML的方法Q_INVOKABLE bool addContact(const QString &name, const QString &phone);Q_INVOKABLE bool removeContact(int index);Q_INVOKABLE bool editContact(int index, const QString &name, const QString &phone);Q_INVOKABLE QVariantList searchContacts(const QString &keyword);Q_INVOKABLE void clearSearch();private:QList<ContactItem> m_items;QList<ContactItem> m_originalItems; // 用于存储搜索前的原始数据
};

DataModel类继承自QAbstractListModel,实现了必要的虚函数:

  • rowCount(): 返回模型中的项目数量
  • data(): 根据索引和角色返回项目数据
  • roleNames(): 定义了模型中可用的角色名称,这些名称将在QML中使用

此外,还通过Q_INVOKABLE宏定义了几个可以从QML中直接调用的方法:

  • addContact(): 添加联系人
  • removeContact(): 删除联系人
  • editContact(): 编辑联系人
  • searchContacts(): 搜索联系人
  • clearSearch(): 清除搜索,恢复原始列表
数据模型实现 (datamodel.cpp)

数据模型的核心实现如下:

DataModel::DataModel(QObject *parent): QAbstractListModel(parent)
{// 添加一些示例联系人数据m_items.append(ContactItem("张三", "13800138000"));m_items.append(ContactItem("李四", "13900139000"));m_items.append(ContactItem("王五", "13700137000"));// 保存原始数据m_originalItems = m_items;
}QVariant DataModel::data(const QModelIndex &index, int role) const
{if (!index.isValid())return QVariant();if (index.row() >= m_items.count())return QVariant();const ContactItem &item = m_items.at(index.row());switch (role) {case NameRole:return item.name();case PhoneRole:return item.phone();case FirstLetterRole:return item.firstLetter();default:return QVariant();}
}// 搜索联系人实现
QVariantList DataModel::searchContacts(const QString &keyword)
{if (keyword.isEmpty()) {beginResetModel();m_items = m_originalItems;endResetModel();return QVariantList();}QVariantList results;beginResetModel();m_items.clear();for (const ContactItem &item : m_originalItems) {if (item.name().contains(keyword, Qt::CaseInsensitive) ||item.phone().contains(keyword, Qt::CaseInsensitive)) {m_items.append(item);}}endResetModel();return results;
}

2. 主程序入口点 (main.cpp)

主函数设置了QML引擎并将C++数据模型暴露给QML:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "datamodel.h"int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);QQmlApplicationEngine engine;QObject::connect(&engine,&QQmlApplicationEngine::objectCreationFailed,&app,[]() { QCoreApplication::exit(-1); },Qt::QueuedConnection);// 创建数据模型实例DataModel *model = new DataModel(&engine);// 将模型暴露给QMLengine.rootContext()->setContextProperty("dataModel", model);engine.loadFromModule("qml_listview_cpp", "Main");return app.exec();
}

通过setContextProperty方法,将C++数据模型注册为QML上下文属性,这样在QML代码中就可以直接访问dataModel对象了。

3. 主界面设计 (Main.qml)

主界面采用了QML编写,实现了联系人的列表显示和搜索功能:

import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Layouts
import "./components"  // 导入自定义组件Window {width: 640height: 480visible: truetitle: "联系人列表"// ... 省略部分代码 ...ColumnLayout {anchors.fill: parentanchors.margins: 10spacing: 10// 顶部工具栏Rectangle {Layout.fillWidth: trueheight: 50color: "#f0f0f0"radius: 5RowLayout {anchors.fill: parentanchors.margins: 5spacing: 10CustomTextField {id: searchFieldLayout.fillWidth: trueplaceholderText: "搜索联系人..."leftIcon: "qrc:/icons/find.png"onTextChanged: dataModel.searchContacts(text)onRightIconClicked: {text = ""dataModel.clearSearch()}}IconButton {text: "添加联系人"iconSource: "qrc:/icons/add.png"showBackground: truebackgroundColor: "#BBDEFB"onClicked: addContactDialog.open()}}}// 联系人列表ListView {Layout.fillWidth: trueLayout.fillHeight: truemodel: dataModelspacing: 10clip: truedelegate: Rectangle {width: ListView.view.widthheight: 80color: "#f0f0f0"radius: 5// ... 省略部分代码 ...RowLayout {anchors.fill: parentanchors.margins: 10spacing: 15// 首字母头像Rectangle {width: 60height: 60radius: width / 2color: {const colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEEAD", "#D4A5A5", "#9B59B6"]return colors[firstLetter.charCodeAt(0) % colors.length]}Text {anchors.centerIn: parenttext: firstLettercolor: "white"font.pixelSize: 24font.bold: true}}// 联系人信息ColumnLayout {Layout.fillWidth: truespacing: 5Text {text: namefont.bold: truefont.pixelSize: 16Layout.fillWidth: true}Text {text: phonecolor: "#666666"font.pixelSize: 14Layout.fillWidth: true}}// 操作按钮RowLayout {spacing: 10// 编辑按钮IconButton {iconSource: "qrc:/icons/edit.png"onClicked: {currentEditIndex = indexeditContactDialog.currentName = nameeditContactDialog.currentPhone = phoneeditContactDialog.open()}}// 删除按钮IconButton {iconSource: "qrc:/icons/delete.png"onClicked: dataModel.removeContact(index)}}}}}}
}

主界面的核心部分是一个ListView,它使用C++提供的dataModel作为数据源。每个联系人项目都显示为一个带有圆形首字母头像、姓名、电话号码以及编辑和删除按钮的矩形卡片。

主界面效果图:

主界面效果图


4. 联系人对话框 (ContactDialog.qml)

为了添加和编辑联系人,项目实现了一个模态对话框:

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import "./components"Dialog {id: rootwidth: 400modal: true// 属性property bool isEdit: false  // 用于区分是编辑还是添加模式property string currentName: ""property string currentPhone: ""// 标题根据模式动态设置title: isEdit ? "修改联系人" : "添加新联系人"closePolicy: Dialog.NoAutoClose// 信号signal contactConfirmed(string name, string phone)// ... 省略部分代码 ...contentItem: ColumnLayout {spacing: 20anchors.margins: 10CustomTextField {id: nameFieldLayout.fillWidth: trueplaceholderText: "姓名"leftIcon: "qrc:/icons/user.png"}CustomTextField {id: phoneFieldLayout.fillWidth: trueplaceholderText: "电话"leftIcon: "qrc:/icons/phone.png"validator: RegularExpressionValidator {regularExpression: /^[0-9\+\-\s]*$/}}// 按钮区域RowLayout {Layout.alignment: Qt.AlignRight | Qt.AlignBottomspacing: 10CustomButton {id: confirmButtontext: isEdit ? qsTr("保存") : qsTr("确定")enabled: nameField.text.length > 0 && phoneField.text.length > 0onClicked: root.accept()}CustomButton {id: cancelButtontext: qsTr("取消")bgColor: "#f5f5f5"textColor: "#333333"onClicked: root.reject()}}}
} 

这个对话框可以在两种模式下工作:添加新联系人和编辑现有联系人。它包含两个自定义文本输入字段用于输入姓名和电话号码,以及确认和取消按钮。

对话框效果图:

添加联系人

5. 自定义组件

为了提升UI的美观度和复用性,项目定义了几个自定义组件:

CustomTextField.qml

此处代码省略…

这个自定义文本输入框增强了标准的TextField,添加了左侧图标、右侧图标或清除按钮等功能。如果所示:

自定义TextField


CustomButton.qml

此处代码省略…

自定义按钮组件提供了更灵活的外观定制,包括背景色、文本色以及悬停效果。

主要在对话窗中使用了CustomButton:

自定义Button


IconButton.qml

此处代码省略…

图标按钮组件实现了一个可以显示图标和文本的自定义按钮,提供了丰富的自定义选项,如图标大小、边框、背景色等。

在列表中使用了IconButton:
IconButton1
在添加联系人按钮上使用了IconButton:
IconButton2

只需要设置背景色和文字即可实现不同的样式效果。


运行效果

查找联系人:

搜索

修改联系人:

请添加图片描述
新增/删除联系人:

新增和删除


总结

本文介绍了一个基于Qt/QML与C++混合开发的联系人管理应用。通过这个示例,我们展示了:

  1. QML与C++协同工作的模式:QML负责直观高效的UI设计,C++处理数据逻辑和模型。
  2. 自定义QML组件的实现:通过组件化设计提高代码复用性和可维护性。
  3. QAbstractListModel的使用:通过继承QAbstractListModel创建自定义数据模型。
  4. 信号与槽机制:利用Qt的信号与槽机制实现UI与数据模型的解耦。

下载链接

您可以通过以下链接获取完整的源代码:GitCode -> QML -> ListView & Model

QML ListView & Model

相关文章:

QML与C++:基于ListView调用外部模型进行增删改查(附自定义组件)

目录 引言相关阅读项目结构文件组织 核心技术实现1. 数据模型设计联系人项目类 (datamodel.h)数据模型类 (datamodel.h)数据模型实现 (datamodel.cpp) 2. 主程序入口点 (main.cpp)3. 主界面设计 (Main.qml)4. 联系人对话框 (ContactDialog.qml)5. 自定义组件CustomTextField.qm…...

# linux 设置宽容模式

linux 设置宽容模式 在Linux系统中&#xff0c;通常没有直接称为“宽容模式”的设置选项&#xff0c;但你可以通过几种方式来模拟或调整系统行为&#xff0c;使其表现得更加“宽容”&#xff0c;特别是在处理错误、权限问题或其他潜在问题时。以下是一些常见的方法&#xff1a…...

#1 理解物联网

物联不是一个新概念&#xff0c;物联网如其中文译名&#xff0c; 虚拟和物的对应和联接。 对于人类的梦想而言&#xff0c;总是希望自己无比强大&#xff0c;但受限于外部条件而只能为此悻悻念念。 所以人们的目光聚焦在&#xff0c;上世纪70年代发展的传感器、大规模电路、通…...

物联网场景实战:智能电表数据管理与分析(二)

数据管理 数据清洗与预处理 智能电表在数据采集、传输和存储过程中&#xff0c;不可避免地会引入噪声、出现缺失值和异常值等问题&#xff0c;这些问题会严重影响数据的质量和后续分析的准确性&#xff0c;因此数据清洗至关重要。 噪声数据通常是由于测量误差、通信干扰等原…...

linux一次启动多个jar包

linux一次启动多个jar包并且可以自定义路径和端口号 代码使用 分享公司大神使用的一个脚步,可以一次启动多个jar包,也可以指定启动jar包 代码 #! /bin/sh # 端口号 PORTS(8080 8081 8082 8083) # 模块 MODULES(gateway auth system file) # 模块名称 MODULE_NAMES(网关服务 认…...

自然语言交互:NAS进化的下一站革命

自然语言交互&#xff1a;NAS进化的下一站革命 在数据爆炸式增长的数字时代&#xff0c;网络附加存储设备&#xff08;NAS&#xff09;早已突破企业级应用的边界&#xff0c;成为个人数字资产管理的核心枢纽。当全球NAS市场年复合增长率稳定在15%之际&#xff0c;耘想科技推出…...

go中我遇到的问题总结

go问题总结 1 - go中的nil等于java中的null吗 在 Go 和 Java 中,nil 和 null 都用于表示“空值”,但它们的实现和使用方式有所不同。 以下是 Go 中的 nil 和 Java 中的 null 之间的对比: 1. Go 中的 nil 在 Go 中,nil 是一个预定义的常量,表示零值。它的行为根据数据类…...

java面试题带答案2025最新整理

文章目录 一、java面试题集合框架1. 请简要介绍 Java 集合框架的体系结构2. ArrayList 和 LinkedList 的区别是什么3. HashMap 的工作原理是什么&#xff0c;它在 JDK 7 和 JDK 8 中有哪些不同4. 如何解决 HashMap 的线程安全问题5. TreeSet 是如何保证元素有序的 二、java面试…...

第七届浙江省大学生网络与信息安全竞赛决赛Unserialize深度解析 1.0

花还会重新开&#xff0c;不同的春来了又来。 - 2025.4.11 0x01 声明 仅作为个人学习使用&#xff0c;仅供参考&#xff0c;欢迎交流 可能是新生赛缘故&#xff0c;突发奇想&#xff0c;想好好梳理此题&#xff0c;顺便写成参考&#xff0c;于是有了这篇文章 当然很多理解可…...

onlyoffice 在线编辑集成

onlyoffice 在线编辑集成 项目中要使用word在线编辑功能&#xff0c;记录一下过程 安装使用docker版本 docker run -itd -p 8001:80 --name kodoffice --restart always registry.cn-hangzhou.aliyuncs.com/kodcloud/kodoffice:7.4.1.1 启动后http://192.168.x.x:8001/web/…...

2.4goweb 项目1

mysql库和表 CREATE DATABASE IF NOT EXISTS book_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE book_manager;-- 用户表&#xff08;用于登录&#xff09; CREATE TABLE IF NOT EXISTS users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(…...

ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(系列开篇)

目录 ESP-ADF外设子系统深度解析&#xff1a;esp_peripherals组件架构与核心设计&#xff08;系列开篇&#xff09;简介模块概述功能定义架构位置核心特性 接口分析公共API概述1. 外设集合管理API2. 单个外设管理API3. 事件通信API4. 定时器管理API 数据结构关键数据结构分析枚…...

供应链管理:供应链管理的边界

一、追根溯源&#xff0c;什么是真正的财富 序号财富解释1土地作为生产资料&#xff0c;土地是农业、工业、商业的基础 城市中心的土地因稀缺性而价值连城&#xff0c;农业土地的肥沃程度直接影响粮食产量。2资源、矿产提供能源和原材料&#xff0c;支撑工业生产和经济发展。 …...

【Linux网络编程】TCP Echo Server的实现

本文专栏&#xff1a;linux网络编程 本文的基础知识是基于上篇文章&#xff1a;UDP Echo Server的实现 传送门&#xff1a; 【Linux网络编程】UDP Echo Server的实现 -CSDN博客 目录 一&#xff0c;InetAddr类的编写 二&#xff0c;客户端代码编写 创建套接字&#xff08;s…...

信奥赛CSP-J复赛集训(数学思维专题)(11):P9585 「MXOI Round 2」酒店

信奥赛CSP-J复赛集训&#xff08;数学思维专题&#xff09;&#xff08;11&#xff09;&#xff1a;P9585 「MXOI Round 2」酒店 题目描述 小 C 开了一家酒店&#xff0c;叫做 CC Hotel。 一天&#xff0c;CC Hotel 来了 n n n 位客人。小 C 需要把他们都安排在酒店的某一层…...

python: audioFlux XXCC 提取梅尔频率倒谱系数 MFCC

承上一篇&#xff1a;python&#xff1a;audioFlux 使用教程 XXCC: 倒谱系数&#xff0c;支持所有频谱类型. 可以提取梅尔频率倒谱系数&#xff08;MFCC&#xff09; Cepstrum coefficients, supports all spectrum types. 以下是使用 audioflux 库中 XXCC 类计算倒谱系数…...

PHP + Go 如何协同打造高并发微服务?

为什么需要 PHP Go 协同&#xff1f; 在微服务架构中&#xff0c;PHP 和 Go 看似是“两个世界”的语言&#xff0c;但它们的互补性极强&#xff1a; PHP&#xff1a;开发效率高、生态成熟&#xff0c;适合快速实现复杂业务逻辑&#xff08;如电商订单、用户系统&#xff09;…...

k8s工具使用

Kubectl Cheat Sheet k8s的命令级别 1.基础命令(初级) 2.基础命令(中级) 3.部署命令 4.集群管理命令 5.故障排查和调试命令 6.高级命令 7.设置命令 8.其它命令 命令行提示 为了使用kubectl命令更加高效,我们可以选择安装一下开源软件来增加操作kubectl命令的快捷方式,同…...

uml制做参考-以代码画UML图

【PlantUML系列】类图&#xff08;一&#xff09;_plantuml skin-CSDN博客 UML入门以及Plant UML工具介绍_plantuml-CSDN博客 UML类图详解-CSDN博客 【PlantUML】-类图-CSDN博客 【掌握绘图艺术】用PlantUML绘制完美UML图表&#xff0c;编程开发者的福音 - 知乎 如何优化P…...

深入解析B站androidApp接口:从bilibili.api.ticket.v1.Ticket/GetTicket到SendMsg的技术分析

前言 最近一段时间&#xff0c;我对B站的App接口进行了深入分析&#xff0c;特别是关注了认证机制和私信功能的实现。通过逆向工程和网络抓包&#xff0c;发现了B站移动端API的底层工作原理&#xff0c;包括设备标识生成机制、认证流程和消息传输协议。本文将分享这些研究成果…...

[AI ][Dify] 构建一个自动化新闻编辑助手:Dify 工作流实战指南

在内容创作行业中,自动化辅助工具已成为提升编辑效率的重要利器。本文将通过 Dify 平台,演示如何构建一个**“新闻编辑助手”**,实现从网页抓取、文本翻译、标题生成,到新闻配图的全流程自动化。 🎯 目标概览 这个工作流旨在实现如下功能: 从指定网页抓取新闻内容; 使…...

Unity中国战略调整简讯:Unity6下架 团结引擎接棒

Unity中国战略调整简讯&#xff1a;Unity6下架 团结引擎接棒 免费版 2025年4月9日 —— Unity中国宣布自即日起&#xff0c;中国大陆及港澳地区停止提供Unity 6及后续版本下载与服务&#xff0c;相关功能由国产引擎“团结引擎”承接。国际版2022 LTS及更早版本仍由Unity中国维护…...

司美格鲁肽用SNAC市场报告:2024年全球市场销售额达到了0.14亿美元

引言&#xff1a;了解司美格鲁肽与SNAC的重要性 在当前的医药领域&#xff0c;司美格鲁肽&#xff08;Semaglutide&#xff09;作为一种创新性的治疗2型糖尿病和肥胖症的药物&#xff0c;受到了广泛关注。而SNAC&#xff08;N-&#xff08;8-&#xff08;2-羟苯基&#xff09;…...

自动驾驶第一性原理

所谓的第一性原理&#xff1a; 就是指从最基本的物理规律&#xff0c;数据逻辑及工程约束条件出发&#xff0c;剥离所有的非本质的假设&#xff0c;直接推导出自动驾驶最核心的要素。 自动驾驶核心框架分解&#xff1a; 1、根本目标&#xff1a; 安全高效的将人/物从A地运送…...

《UE5_C++多人TPS完整教程》学习笔记36 ——《P37 拾取组件(Pickup Widget)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P37 拾取组件&#xff08;Pickup Widget&#xff09;》 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Steph…...

Uniswap V2/V3/V4 流动性与价格计算详解

Uniswap V2/V3/V4 流动性与价格计算详解 一、核心概念对比 Uniswap V2 流动性模型: 恒定乘积公式 (x * y = k)价格决定: 完全由池子中的代币数量决定 (price = y/x)流动性衡量: 总储备量代表流动性,直接通过 getReserves() 获取流动性分布: 均匀分布在所有价格点交易费用: 固…...

yum安装MySQL数据库

yum安装方式 优点&#xff1a;操作简单易用。不用单独下载&#xff0c;服务器可以联网且yum源没有问题即可(可以选择国内的163/阿里源) 安装步骤&#xff1a; 1.关闭防火墙和selinux: systemctl stop firewalld ##关闭防火墙 systemctl disable firewalld …...

大联盟(特别版)双端互动平台完整套件分享:含多模块源码+本地部署环境

这是一套结构清晰、功能完整的互动平台组件&#xff0c;适合有开发经验的技术人员进行模块参考、结构研究或本地部署实验使用。 该平台覆盖前端展示、后端服务、移动端资源以及完整数据库&#xff0c;采用模块化架构&#xff0c;整体部署流程简单清晰&#xff0c;适合自研团队参…...

【Code】《代码整洁之道》笔记-Chapter15-JUnit内幕

第15章 JUnit内幕 JUnit是最有名的Java框架之一。就像别的框架一样&#xff0c;它概念简单&#xff0c;定义精确&#xff0c;实现优雅。但它的代码是怎样的呢&#xff1f;本章将研判来自JUnit框架的一个代码例子。 15.1 JUnit框架 JUnit有很多位作者&#xff0c;但它始于K…...

【Java八股】

JVM JVM中有哪些引用 在Java中&#xff0c;引用&#xff08;Reference&#xff09;是指向对象的一个变量。Java中的引用不仅仅有常规的直接引用&#xff0c;还有不同类型的引用&#xff0c;用于控制垃圾回收&#xff08;GC&#xff09;的行为和优化性能。JVM中有四种引用类型…...

深入探究AI编程能力:ChatGPT及其大规模模型的实现原理

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4-turbo模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 随着人工智能的快速发展&#xff0c…...

高德地图 JS-SDK 实现教程

高德地图 JS-SDK 实现教程&#xff1a;定位、地图选点、地址解析等 适用地点选择、地址显示、表单填写等场景&#xff0c;全面支持移动端、手机浏览器和 PC端环境 一、创建应用&Key 前端&#xff08;JS-SDK、地图组件&#xff09; 登陆 高德开放平台创建应用&#xff0c;…...

【信息系统项目管理师】高分论文:论信息系统项目的整合管理(银行数据仓库项目)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 正文一、制定项目章程二、制定项目管理计划三、指导和管理项目的实施四、管理项目知识五、监控项目工作六、实施整体变更控制七、结束项目或阶段正文 2023年6月,我以项目经理的身份,参加了 xx银行xx省分行数…...

dev中使用auto的方法

在dev-c中使用新特性是一样的道理&#xff0c;在他启动编译器来编译代码的时候我们让他加上这个参数就行了&#xff0c;设置方法是:在Tools里面找到Compiler Options打开它&#xff0c;然后把那个Add the following commands when calling compiler:选上勾&#xff0c;在里面加…...

C 语言中经典的数据结构

在 C 语言中&#xff0c;经典的数据结构通常包括以下几种&#xff0c;每种都有其特定的应用场景和实现方式&#xff1a; 1. 数组&#xff08;Array&#xff09; 定义&#xff1a;连续内存空间存储相同类型的数据。 特点&#xff1a;随机访问快&#xff08;O(1)&#xff09;&am…...

小白学习java第12天(下):网络编程

上面我们了解TCP就是三次握手&#xff01;&#xff01;&#xff01; 下面我们就详细介绍一下UDP&#xff0c;就是进行发包&#xff08;TCP协议类似于就是打电话&#xff0c;你必须进行连接才能进行传输&#xff0c;但是UDP类似于发消息&#xff0c;连不连接我都是可以的&#…...

论文精度:双分支图Transformer网络:视频驱动的3D人体网格重建新突破

论文地址:https://arxiv.org/pdf/2412.01179 目录 一、背景与问题定义 1.1 3D人体网格重建的意义 1.2 现有方法的困境 二、核心创新:DGTR网络架构 2.1 整体框架设计 2.2 全局运动感知分支(GMA) 2.3 局部细节优化分支(LDR) 2.3.1 局部信息聚合 2.3.2 调制图卷积…...

华三IRF堆叠技术

IRF&#xff08;Intelligent Resilient Framework&#xff0c;智能弹性架构&#xff09;是华三通信&#xff08;H3C&#xff09;自主研发的网络设备虚拟化技术&#xff0c;通过将多台物理设备整合为单一逻辑设备&#xff0c;实现统一管理、高可靠性和灵活扩展。以下是其核心要点…...

第一阶段补充知识

目录 书写脚本使用的相关知识&#xff1f; 备份和冗灾的区别&#xff1f;什么叫DD备份&#xff0c;什么叫DD冗灾&#xff1f; 关于Linux系统优化以及Linux的安全加固&#xff1f; 系统优化 硬件系统优化&#xff1a; 内核参数优化&#xff1a; 网络性能优化&#xff1a; 进程管…...

STM32 HAL库 L298N电机驱动模块实现

一、引言 在机器人、自动化设备等众多应用场景中&#xff0c;电机驱动是一个关键的部分。L298N 是一款常用的电机驱动模块&#xff0c;它可以驱动两个直流电机或一个步进电机。STM32F407 是一款高性能的 ARM Cortex-M4 内核微控制器&#xff0c;结合 HAL 库可以方便地实现对 L…...

Redis的Key的过期策略

我们都知道Redis的键值对是可以设置过期时间的&#xff0c;那么就会涉及到一个问题&#xff0c;Redis到底是如何做到响应快的同时有能快速地释放掉过期的键值对的呢&#xff1f;不卖关子了&#xff0c;直接说答案&#xff0c;那就是Redis两个策略&#xff1a;定期删除和惰性删除…...

ubuntu桌面版使用root账号进行登录

这里写自定义目录标题 第一步&#xff1a;给root账户设置密码&#xff0c;并切换至root账户第二步&#xff1a;注释gdm-autologin文件内的相关内容第三步&#xff1a;注释gdm-password文件内的相关内容第四步&#xff1a;重启系统即可使用root账户登录 第一步&#xff1a;给roo…...

贪心算法(18)(java)距离相等的条形码

在一个仓库里&#xff0c;有一排条形码&#xff0c;其中第 i 个条形码为 barcodes[i]。 请你重新排列这些条形码&#xff0c;使其中任意两个相邻的条形码不能相等。 你可以返回任何满足该要求的答案&#xff0c;此题保证存在答案。 示例 1&#xff1a; 输入&#xff1a;barco…...

CentOS服务器能ping通却无法yum install:指定镜像源解决

文章目录 前言一、问题记录二、解决过程1.修改DNS无效2.指定镜像源 总结 前言 今天有一个项目现场要在一个远程centos服务器上部署产品服务&#xff0c;发现能ping通百度&#xff0c;但是无法yum install 安装基础软件包&#xff0c;开始以为DNS服务器的问题&#xff0c;结果配…...

WebSocket与MQTT

在物联网&#xff08;IoT&#xff09;领域&#xff0c;​WebSocket和MQTT确实都可以实现实时通信&#xff0c;但它们的核心设计目标、适用场景和角色存在显著差异。以下是两者的对比分析&#xff1a; ​1. 协议设计初衷​ ​WebSocket​ ​目标​&#xff1a;提供浏览器与服务器…...

【论文解读】MSVM-UNet: Multi-Scale Vision Mamba UNet for Medical Image Segmentation

MSVM-UNet: Multi-Scale Vision Mamba UNet for Medical Image Segmentation 论文链接&#xff1a; https://arxiv.org/abs/2408.13735 Code&#xff1a; https://github.com/gndlwch2w/msvm-unet 来源&#xff1a; 2024 IEEE International Conference on Bioinformatics an…...

Vue表单组件el-form校验规则rules,条件判断rules表单验证显示必填或非必填

在使用 Element UI&#xff08;一个基于 Vue 的前端框架&#xff09;的表单验证功能时&#xff0c;你可能想要实现一个规则&#xff0c;使得某些字段在特定条件下成为必填项&#xff0c;或者在满足某些条件时不允许为空。这通常通过自定义校验规则来实现。 <template>&l…...

手动关闭ArcGIS与ArcGIS Online连接的方法

【关闭软件启动时ArcGIS与ArcGIS Online连接方法】 打开C盘找到文件夹“C:\Program Files (x86)\Common Files\ArcGIS\bin”&#xff0c;如下图&#xff0c;删除“ArcGISConnection.exe”与“ArcGISConnectionTest.exe”文件&#xff0c;软件下次启动的时候就不会建立与ArcGIS …...

(二十五)安卓开发一个完整的登录页面-支持密码登录和手机验证码登录

下面将详细讲解如何在 Android 中开发一个完整的登录页面&#xff0c;支持密码登录和手机验证码登录。以下是实现过程的详细步骤&#xff0c;从布局设计到逻辑实现&#xff0c;再到用户体验优化&#xff0c;逐步展开。 1. 设计登录页面布局 首先&#xff0c;我们需要设计一个用…...

【过程控制系统】PID算式实现,控制系统分类,工程应用中控制系统应该注意的问题

目录 1-1 试简述过程控制的发展概况及各个阶段的主要特点。 1-2 与其它自动控制相比&#xff0c;过程控制有哪些优点&#xff1f;为什么说过程控制的控制过程多属慢过程&#xff1f; 1-3 什么是过程控制系统&#xff0c;其基本分类是什么&#xff1f; 1-4 何为集散控制系统…...