QT之INI、JSON、XML处理
文章目录
- INI文件处理
- 写配置文件
- 读配置文件
- JSON 文件处理
- 写入JSON
- 读取JSON
- XML文件处理
- 写XML文件
- 读XML文件
INI文件处理
首先得引入QSettings
QSettings 是用来存储和读取应用程序设置的一个类
#include "wrinifile.h"#include <QSettings>
#include <QtDebug>
写配置文件
void WriteIniFiles()
{//QSettings用来存储和读取应用程序设置的一个类// 直接使用QSettings类读写INI文件//只给出了文件名,像 "MySQLFiles.ini",那么配置文件会被存放在应用程序的工作目录下//从 Qt 5.15 版本开始,QSettings 默认采用 UTF-8 编码QSettings *ConfigWriteIniFiles=new QSettings("MySQLFiles.ini",QSettings::IniFormat);
/*
QSettings::IniFormat 指定配置文件使用 INI 格式存储。
INI 格式是一种文本格式,由节 (sections) 和键值对 (key-value pairs) 组成,
便于人类阅读和编辑。这种格式在 Windows 系统中传统上用于存储应用程序设置,现在也被广泛用于跨平台应用。
*/// 向INI文件当中写入数据信息// 第一节的第一参数,后面就依次类推ConfigWriteIniFiles->setValue("/database/ip","192.168.12.189");ConfigWriteIniFiles->setValue("/database/port","3308");ConfigWriteIniFiles->setValue("/database/user","root");ConfigWriteIniFiles->setValue("database/password","123456");//写到文件中的格式
/*
[database]
ip=192.168.12.189
port=3308
user=root
password=123456
*/ConfigWriteIniFiles->setValue("/notice/version","5.6");ConfigWriteIniFiles->setValue("/notice/datetime","2022-10-25 16:27:23");
/*
[notice]
version=5.6
datetime=2022-10-25 16:27:23
*///获取MySQLFiles.ini文件路径qDebug() << ConfigWriteIniFiles->fileName();// 向IN文件写入完成之后,删除指针delete ConfigWriteIniFiles;
}
读配置文件
void ReadIniFiles()
{QSettings *ConfigReadIniFiles=new QSettings("MySQLFiles.ini",QSettings::IniFormat);//QSettings->value("....") 返回的是一个 QVariant 对象,而不是直接的字符串QString strip=ConfigReadIniFiles->value("/database/ip").toString();QString strport=ConfigReadIniFiles->value("/database/port/").toString();QString struser=ConfigReadIniFiles->value("/database/user").toString();QString strpassword=ConfigReadIniFiles->value("/database/password").toString();QString strversion=ConfigReadIniFiles->value("/notice/version").toString();QString strdatetime=ConfigReadIniFiles->value("/notice/datetime").toString();/*QString::toUtf8()将字符串转换为UTF-8编码的QByteArray,其.data()返回的char*是合法的UTF-8字节流,与终端编码匹配(假设终端支持UTF-8)。*/qDebug()<<"正确--------";qDebug()<<"读取INI配置文件参数选项如下:";qDebug()<<"MySQL数据库IP地址:"<<strip.toUtf8().data();qDebug()<<"数据库端口:"<<strport.toUtf8().data();qDebug()<<"数据库用户:"<<struser.toUtf8().data();qDebug()<<"数据库密码:"<<strpassword.toUtf8().data();qDebug()<<"数据库版本:"<<strversion.toUtf8().data();qDebug()<<"数据库日期:"<<strdatetime.toUtf8().data();/*QString::data()返回的是QChar*(指向UTF-16数据的指针),直接转换为char*时,每个QChar(16位)会被拆分为两个char(8位),导致字节顺序和编码混乱。*/qDebug()<<"错误--------";qDebug()<<"读取INI配置文件参数选项如下:";qDebug()<<"MySQL数据库IP地址:"<<strip.data();qDebug()<<"数据库端口:"<<strport.data();qDebug()<<"数据库用户:"<<struser.data();qDebug()<<"数据库密码:"<<strpassword.data();qDebug()<<"数据库版本:"<<strversion.data();qDebug()<<"数据库日期:"<<strdatetime.data();// 将读取配置文件完成之后,删除指针delete ConfigReadIniFiles;
}void ReadIniFilesIsKey()
{QSettings setting("./MySQLFiles.ini",QSettings::IniFormat);//返回所有已存储设置的完整键名列表,包括子组中的键foreach(QString key,setting.allKeys()){qDebug()<<key.toUtf8().data()<<":"<<setting.value(key).toString().toUtf8().data();}
}
JSON 文件处理
头文件引入
#include <QMessageBox>
#include <QDebug>
#include <QFile> // 文件读写
#include <QJsonDocument> // JSON文档
#include <QJsonObject> // JSON对象
#include <QJsonParseError> // JSON异常捕捉
写入JSON
// 将数据信息-->写入JSON文件
void QJsonOper::on_pushButtonWriteJson_clicked()
{// 1:创建json对象QJsonObject mysqinfo;//插入键值对mysqinfo.insert("ip","192.168.0.125");mysqinfo.insert("port",3308);mysqinfo.insert("user","root");mysqinfo.insert("password","123456");QJsonObject jsonifo;jsonifo.insert("code",1);jsonifo.insert("dbmsg","MySQL数据库配置参数");// 将json对象作为Json对象插入的数据值jsonifo.insert("data",mysqinfo); // 2: 创建JSON文档//QJsonDocument 用于将 Qt 的数据结构序列化为 JSON 文本 和 反序列化QJsonDocument jsondoc;jsondoc.setObject(jsonifo);// 3: 创建文件QFile qfiles("./databasejsonfiles.json");if(qfiles.open(QIODevice::WriteOnly)){qfiles.write(jsondoc.toJson());qfiles.close();qDebug()<<"恭喜你,json数据文件写入成功!";}QMessageBox::information(this,"写入成功","恭喜你,json数据文件写入成功!");}
读取JSON
void QJsonOper::on_pushButtonReadJson_clicked()
{QString strjson;QString strmsg;QFile qfiles("./databasejsonfiles.json");if(qfiles.open(QIODevice::ReadOnly)){strjson=qfiles.readAll();qfiles.close();}QJsonParseError jsonerror; // 返回JSON解析错误的时候,报告错误信息//把 JSON 格式的文本解析成 Qt 能够处理的数据结构QJsonDocument jsondoc=QJsonDocument::fromJson(strjson.toUtf8(),&jsonerror);if(!jsondoc.isEmpty() && (jsonerror.error==QJsonParseError::NoError)){// 只要jsondoc不为空,和jsonerror没有错误// 将它转换为JSON对象QJsonObject json=jsondoc.object();QJsonValue code=json.value("code");QJsonValue data=json.value("data");// QJsonValue .isUndefined()
//用于检查 QJsonValue 对象是否为未定义状态的方法。在 JSON 处理中,未定义状态不同于空值(null),它表示该 JSON 值从未被显式设置过。if(code.isUndefined() || code.toDouble()!=1 || data.isUndefined() || !data.isObject()){qDebug()<<"转换JSON数据错误,请重新检查?";QMessageBox::critical(this,"错误","转换JSON数据错误,请重新检查?");exit(100);}// 如果没有错误,读取data数据信息QJsonObject databaseinfo=data.toObject();QJsonValue dbip=databaseinfo.value("ip");QJsonValue dbport=databaseinfo.value("port");QJsonValue dbuser=databaseinfo.value("user");QJsonValue dbpassword=databaseinfo.value("password");//判断 data JSON 值是否未定义if(dbip.isUndefined()||dbport.isUndefined()||dbuser.isUndefined()||dbpassword.isUndefined()){qDebug()<<"接口错误,请重新检查?";QMessageBox::critical(this,"错误","接口错误,请重新检查?");exit(100);}QString strip=dbip.toString();int iport=dbport.toInt();QString struser=dbuser.toString();QString strpassword=dbpassword.toString();// 判断每一项配置是否为空if(strip.isEmpty() || struser.isEmpty() || strpassword.isEmpty()){qDebug()<<"此数据项不能为空,请重新检查?";QMessageBox::critical(this,"错误","此数据项不能为空,请重新检查?");exit(100);}qDebug()<<"数据库IP地址:"<<strip;qDebug()<<"数据库端口:"<<iport;qDebug()<<"数据库用户:"<<struser;qDebug()<<"数据库密码:"<<strpassword;// 拼接字符串strmsg+="【JSON配置参数】";strmsg+="\n数据库IP地址:"+strip;strmsg+="\n数据库端口:"+QString::number(iport,10);strmsg+="\n数据库用户:"+struser;strmsg+="\n数据库密码:"+strpassword;}QMessageBox::information(this,"成功",strmsg,QMessageBox::Yes);}
XML文件处理
引入头文件
// QDomComment是专门用来操作XML文件(项目中用来存储一些配置数据信息)
#include <QDomComment>
写XML文件
ReadWriteXml::ReadWriteXml(QWidget *parent): QDialog(parent), ui(new Ui::ReadWriteXml)
{ui->setupUi(this);//QStringstrcurrentfilepath="d:/xmlfiles"; // xml文件路径strcurrentfilename="/factoryworkersxml.xml";
}bool ReadWriteXml::openxmlfiles(QString filenamepath) // 打开指定文件
{// 如果没有,则创建文件m_qfiles.setFileName(strcurrentfilepath+filenamepath);return m_qfiles.open(QIODevice::ReadWrite | QFile::Text);
}void ReadWriteXml::writexmlfiles() // 写入xml文件
{if(!openxmlfiles(strcurrentfilename)){qDebug()<<"写入:打开XML文件失败,请重新检查?";return;}qDebug()<<"写入:打开XML文件成功,请认真操作xml!";//Qt 框架里用于处理 XML 文档的类,它以 DOM(文档对象模型)方式呈现 XML 文档QDomDocument domdoct; // 创建对象//QDomProcessingInstruction 是 Qt 框架中用于处理 XML 处理指令QDomProcessingInstruction version; // 写入xml头部(添加处理命令)version=domdoct.createProcessingInstruction("xml","version = \"1.0\" encoding = \"GB2312\"");domdoct.appendChild(version);// 添加第1个子节点及相关子元素QDomElement domrootelement=domdoct.createElement("factory"); // 创建顶层节点domdoct.appendChild(domrootelement);QDomElement itemrootelement=domdoct.createElement("worker"); // 创建父节点{// 创建子元素QDomElement node1=domdoct.createElement("WNo"); // 创建子节点(创建元素节点)QDomText domtext1=domdoct.createTextNode("WNo"); // 可创建文本节点domtext1.setData(ui->lineEdit_No->text()); // 设置子节点数据node1.appendChild(domtext1); // 将子节点数据进行绑定itemrootelement.appendChild(node1); // 将子节点绑定到父亲节点QDomElement node2=domdoct.createElement("WName"); // 创建子节点(创建元素节点)QDomText domtext2=domdoct.createTextNode("WName"); // 可创建文本节点domtext2.setData(ui->lineEdit_Name->text()); // 设置子节点数据node2.appendChild(domtext2); // 将子节点数据进行绑定itemrootelement.appendChild(node2); // 将子节点绑定到父亲节点QDomElement node3=domdoct.createElement("WSex"); // 创建子节点(创建元素节点)QDomText domtext3=domdoct.createTextNode("WSex"); // 可创建文本节点domtext3.setData(ui->lineEdit_Sex->text()); // 设置子节点数据node3.appendChild(domtext3); // 将子节点数据进行绑定itemrootelement.appendChild(node3); // 将子节点绑定到父亲节点QDomElement node4=domdoct.createElement("WEducation"); // 创建子节点(创建元素节点)QDomText domtext4=domdoct.createTextNode("WEducation"); // 可创建文本节点domtext4.setData(ui->lineEdit_Education->text()); // 设置子节点数据node4.appendChild(domtext4); // 将子节点数据进行绑定itemrootelement.appendChild(node4); // 将子节点绑定到父亲节点QDomElement node5=domdoct.createElement("WDepartment"); // 创建子节点(创建元素节点)QDomText domtext5=domdoct.createTextNode("WDepartment"); // 可创建文本节点domtext5.setData(ui->lineEdit_Department->text()); // 设置子节点数据node5.appendChild(domtext5); // 将子节点数据进行绑定itemrootelement.appendChild(node5); // 将子节点绑定到父亲节点QDomElement node6=domdoct.createElement("WSalary"); // 创建子节点(创建元素节点)QDomText domtext6=domdoct.createTextNode("WSalary"); // 可创建文本节点domtext6.setData(ui->lineEdit_Salary->text()); // 设置子节点数据node6.appendChild(domtext6); // 将子节点数据进行绑定itemrootelement.appendChild(node6); // 将子节点绑定到父亲节点}domrootelement.appendChild(itemrootelement); // 绑定到顶层节点m_qfiles.write(domdoct.toString().toLocal8Bit().data());m_qfiles.close();QMessageBox::information(this,"提示","恭喜你,写入XML文件数据成功,请查看目录文件?",QMessageBox::Yes);
}
读XML文件
void ReadWriteXml::readxmlfiles() // 读取xml文件
{if(!openxmlfiles(strcurrentfilename)){qDebug()<<"读取:打开XML文件失败,请重新检查?";return;}qDebug()<<"读取:打开XML文件成功,请认真操作xml!";QDomDocument docs;//于解析 XML 数据并将其设置为 DOM(文档对象模型)树的方法//QDomDocument::setContent() 函数在解析 XML 时会自动跳过 XML 处理指令 ( 以 <? 开头、?> )//<?xml version = "1.0" encoding = "GB2312"?>if(!docs.setContent(&m_qfiles)){m_qfiles.close();qDebug()<<"读取:操作setContent失败,请重新检查?";return;}qDebug()<<"读取:操作setContent成功,请认真操作!";// 读取根节点QDomElement root=docs.documentElement();// 读取第1个父亲节点QDomNode node=root.firstChild();while(!node.isNull()){QDomNodeList sonlist=node.childNodes(); // 读取子结点集合信息QString rootname=node.toElement().tagName(); // 读取父亲节点名称if(rootname.compare("worker")==0){// 将子节点集合信息传递到读取子节点数据readrootxml(sonlist);}node=node.nextSibling(); // 读取下一个父节点}}void ReadWriteXml::readrootxml(QDomNodeList sonnodelist) // 读取子节点数据
{for(int sonnode=0;sonnode<sonnodelist.size();sonnode++){// 获取子节点QDomElement sonelement=sonnodelist.at(sonnode).toElement();if(sonelement.toElement().tagName().compare("WNo")==0) // 取出子节点进行比较{ui->lineEdit_No_R->setText(sonelement.text());}else if(sonelement.toElement().tagName().compare("WName")==0){ui->lineEdit_Name_R->setText(sonelement.text());}else if(sonelement.toElement().tagName().compare("WSex")==0){ui->lineEdit_Sex_R->setText(sonelement.text());}else if(sonelement.toElement().tagName().compare("WEducation")==0){ui->lineEdit_Education_R->setText(sonelement.text());}else if(sonelement.toElement().tagName().compare("WDepartment")==0){ui->lineEdit_Department_R->setText(sonelement.text());}else if(sonelement.toElement().tagName().compare("WSalary")==0){ui->lineEdit_Salary_R->setText(sonelement.text());}}
}
相关文章:

QT之INI、JSON、XML处理
文章目录 INI文件处理写配置文件读配置文件 JSON 文件处理写入JSON读取JSON XML文件处理写XML文件读XML文件 INI文件处理 首先得引入QSettings QSettings 是用来存储和读取应用程序设置的一个类 #include "wrinifile.h"#include <QSettings> #include <QtD…...

微信小程序调用蓝牙API “wx.writeBLECharacteristicValue()“ 报 errCode: 10008 的解决方案
1、问题现象 问题:在开发微信小程序蓝牙通信功能时,常常会遇到莫名其妙的错误,查阅官方文档可能也无法找到答案。如在写入蓝牙数据时,报了这样的错误: {errno: 1500104, errCode: 10008, errMsg: "writeBLECharacteristicValue:fail:system error, status: UNKNOW…...

【Java基础笔记vlog】Java中常见的几种数组排序算法汇总详解
Java中常见的几种排序算法: 冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell Sort)归并排序(Merge Sort)…...

WebRTC与RTSP|RTMP的技术对比:低延迟与稳定性如何决定音视频直播的未来
引言 音视频直播技术已经深刻影响了我们的生活方式,尤其是在教育、医疗、安防、娱乐等行业中,音视频技术成为了行业发展的重要推动力。近年来,WebRTC作为一种开源的实时通信技术,成为了音视频领域的重要选择,它使得浏览…...

spring cloud alibaba Sentinel详解
spring cloud alibaba Sentinel详解 spring cloud alibaba Sentinel介绍 Sentinel 是阿里巴巴开源的一款动态流量控制组件,主要用于保障微服务架构中的服务稳定性。它能够对微服务中的各种资源(如接口、服务方法等)进行实时监控、流量控制、…...
Kafka + Flink + Spark 构建实时数仓全链路实战
本文聚焦如何通过 Kafka + Flink + Spark 构建一套稳定、可扩展、可插拔的实时数仓体系。覆盖从数据接入、实时清洗、指标计算,到离线补数、数据一致性保障的完整链路设计,结合实践样例提供可复制的落地方法。 🧱 一、架构总览 ┌────────────┐│ 数据源 …...

React19源码系列之渲染阶段performUnitOfWork
在 React 内部实现中,将 render 函数分为两个阶段: 渲染阶段提交阶段 其中渲染阶段可以分为 beginWork 和 completeWork 两个阶段,而提交阶段对应着 commitWork。 在之前的root.render过程中,渲染过程无论是并发模式执行还是同…...
Redis中的事务和原子性
在 Redis 中,事务 和 原子性 是两个关键概念,用于保证多个操作的一致性和可靠性。以下是 Redisson 和 Spring Data Redis 在处理原子性操作时的区别与对比: 1. Redis 的原子性机制 Redis 本身通过以下方式保证原子性: 单线程模型…...
怎样把B站的视频保存到本地
在B站(哔哩哔哩)上,有数不清的优质内容,无论是搞笑视频、学习资料,还是动漫影视,总有一些视频让你想反复观看。但是,遇到没有网络或流量不够用的时候,怎么办?把B站的视频…...
Vue3前后端分离用户信息显示方案
在Vue3前后端分离的项目中,若后端仅返回用户ID,可通过以下步骤显示用户名: 解决方案 获取用户信息API 确保后端提供以下任意一种接口: 批量查询接口:传入多个用户ID,返回对应的用户信息列表 单个查询接口…...

DL00987-基于深度学习YOLOv11的红外鸟类目标检测含完整数据集
提升科研能力,精准识别红外鸟类目标! 完整代码数据集见文末 针对科研人员,尤其是研究生们,是否在鸟类目标检测中遇到过数据不够精准、处理困难等问题?现在,我们为你提供一款基于深度学习YOLOv11的红外鸟类…...

黑马程序员C++2024新版笔记 第4章 函数和结构体
1.结构体的基本应用 结构体struct是一种用户自定义的复合数据类型,可以包含不同类型的成员。例如: struct Studet {string name;int age;string gender; } 结构体的声明定义和使用的基本语法: struct 结构体类型 {成员1类型 成员1名称;成…...

数据仓库,扫描量
有五种通用技术用于限制数据的扫描量,正如图3 - 4所示。第一种技术是扫描那些被打上时戳的数据。当一个应用对记录的最近一次变化或更改打上时戳时,数据仓库扫描就能够很有效地进行,因为日期不相符的数据就接触不到了。然而,目前的…...
Day126 | 灵神 | 二叉树 | 层数最深的叶子结点的和
Day126 | 灵神 | 二叉树 | 层数最深的叶子结点的和 1302.层数最深的叶子结点的和 1302. 层数最深叶子节点的和 - 力扣(LeetCode) 思路: 这道题用层序遍历的思路比较好想,就把每层的都算一下,然后返回最后一层的和就…...
Python实例题:人机对战初体验Python基于Pygame实现四子棋游戏
目录 Python实例题 题目 代码实现 实现原理 游戏逻辑: AI 算法: 界面渲染: 关键代码解析 游戏棋盘渲染 AI 决策算法 胜利条件检查 使用说明 安装依赖: 运行游戏: 游戏操作: 扩展建议 增强…...

Vue3性能优化: 大规模列表渲染解决方案
# Vue3性能优化: 大规模列表渲染解决方案 一、背景与挑战 背景 在大规模应用中,Vue3的列表渲染性能一直是开发者关注的焦点。大规模列表渲染往往会导致卡顿、内存占用过高等问题,影响用户体验和系统整体性能。 挑战 渲染大规模列表时,DOM操作…...
笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数
笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数 最近有这么个需求,需要往某一个业务的外部接口上传文件信息,但是现在没有现成的文件,只在数据库存了对应的url&#…...

【RocketMQ 生产者和消费者】- 生产者启动源码 - MQClientInstance 定时任务(4)
文章目录 1. 前言2. startScheduledTask 启动定时任务2.1 fetchNameServerAddr 拉取名称服务地址2.2 updateTopicRouteInfoFromNameServer 更新 topic 路由信息2.2.1 topic 路由信息2.2.2 updateTopicRouteInfoFromNameServer 获取 topic2.2.3 updateTopicRouteInfoFromNameSer…...

超全GPT-4o 风格提示词案例,持续更新中,附使用方式
本文汇集了各类4o风格提示词的精选案例,从基础指令到复杂任务,从创意写作到专业领域,为您提供全方位的参考和灵感。我们将持续更新这份案例集,确保您始终能够获取最新、最有效的提示词技巧。 让我们一起探索如何通过精心设计的提…...

Android 自定义SnackBar和下滑取消
如何自定义SnackBar 首先我们得了解SnackBar的布局: 之前我看有一些方案是获取内部的contentLayout,然后做一些处理。但是现在已经行不通了: RestrictTo(LIBRARY_GROUP) public static final class SnackbarLayout extends BaseTransientB…...

Netty学习专栏(三):Netty重要组件详解(Future、ByteBuf、Bootstrap)
文章目录 前言一、Future & Promise:异步编程的救星1.1 传统NIO的问题1.2 Netty的解决方案1.3 代码示例:链式异步操作 二、ByteBuf:重新定义数据缓冲区2.1 传统NIO ByteBuffer的缺陷2.2 Netty ByteBuf的解决方案2.3 代码示例:…...

详解 C# 中基于发布-订阅模式的 Messenger 消息传递机制:Messenger.Default.Send/Register
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...

多场景游戏AI新突破!Divide-Fuse-Conquer如何激发大模型“顿悟时刻“?
多场景游戏AI新突破!Divide-Fuse-Conquer如何激发大模型"顿悟时刻"? 大语言模型在强化学习中偶现的"顿悟时刻"引人关注,但多场景游戏中训练不稳定、泛化能力差等问题亟待解决。Divide-Fuse-Conquer方法,通过…...

Java 函数式接口(Functional Interface)
一、理论说明 1. 函数式接口的定义 Java 函数式接口是一种特殊的接口,它只包含一个抽象方法(Single Abstract Method, SAM),但可以包含多个默认方法或静态方法。函数式接口是 Java 8 引入 Lambda 表达式的基础,通过函…...

分布式锁总结
文章目录 分布式锁什么是分布式锁?分布式锁的实现方式基于数据库(mysql)实现基于缓存(redis)多实例并发访问问题演示项目代码(使用redis)配置nginx.confjmeter压测复现问题并发是1,即不产生并发问题并发30测试,产生并发问题(虽然单实例是synchronized&am…...

使用MybatisPlus实现sql日志打印优化
背景: 在排查无忧行后台服务日志时,一个请求可能会包含多个执行的sql,经常会遇到SQL语句与对应参数不连续显示,或者参数较多需要逐个匹配的情况。这种情况下,如果需要还原完整SQL语句就会比较耗时。因此,我…...
springboot中redis的事务的研究
redis的事务类似于队列操作,执行过程分为三步: 开启事务入队操作执行事务 使用到的几个命令如下: 命令说明multi开启一个事务exec事务提交discard事务回滚watch监听key(s):当监听一个key(s)时,如果在本次事务提交之…...
为什么我输入对了密码,还是不能用 su 切换到 root?
“为什么我输入对了密码,还是不能用 su 切换到 root?” 其实这背后可能不是“密码错了”,而是系统不允许你用 su 切 root,即使密码对了。 👇 以下是最常见的几个真正原因: ❌ 1. Root 用户没有设置密码&…...

client.chat.completions.create方法参数详解
response client.chat.completions.create(model"gpt-3.5-turbo", # 必需参数messages[], # 必需参数temperature1.0, # 可选参数max_tokensNone, # 可选参数top_p1.0, # 可选参数frequency_penalty0.0, # 可选参数presenc…...
量子计算与云计算的融合:技术前沿与应用前景
目录 引言 量子计算基础 量子计算的基本原理 量子计算的优势与挑战 量子计算的发展阶段 云计算基础 云计算的基本概念 云计算的应用领域 云计算面临的挑战 量子计算与云计算的结合 量子云计算的概念与架构 量子云计算的服务模式 量子云计算的优势 量子云计算的发展…...