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

QT实现天气预报

1. MainWindow类设计的成员变量和方法

public:
    MainWindow(QWidget* parent = nullptr);
    ~MainWindow();

   protected:

形成文本菜单来用来右键关闭窗口
    void contextMenuEvent(QContextMenuEvent* event);

鼠标被点击之后此事件被调用

    void mousePressEvent(QMouseEvent *ev);

移动窗口
    void mouseMoveEvent(QMouseEvent* ev);
    //重写过滤器方法
    bool eventFilter(QObject *watched, QEvent *event);

private slots://信号槽函数
    void onReplied(QNetworkReply* reply);

    void on_btnSearch_clicked();

public:

    void getWeaterInfo(QString cityCode);
    //解析json数据
    void parseJson(QByteArray& byteArray);
    int parseString(QString str);
    //更新UI
    void UpdateUi();
    //检测空气质量
   int checkedQulity(int api);
    //绘制高低温曲线
    void paintHighCurve();
   void paintLowCurve();


   private:
    Ui::MainWindow* ui;

    QMenu* mExitMenu;   // 右键退出的菜单
    QAction* mExitAct;  // 退出的行为
    QPoint m_offset;//鼠标和左上角坐标的偏移距离
    QNetworkAccessManager *m_netAccessManager;
    Today m_today;
    Day m_day[7];

    //星期和日期
    QList<QLabel*> m_weekList;
    QList<QLabel*> m_dateList;

    //天气和天气图标
    QList<QLabel*> m_typeList;
    QList<QLabel*> m_typeIconList;

    //天气污染指数
    QList<QLabel*> m_ApiList;

    //风力和风向
    QList<QLabel*> m_FLList;
    QList<QLabel*> m_FXList;

把UI控件都放到QList集合里面

//将UI控件放到数组里边,方便使用循环进行处理m_dateList << ui->lblDate0 << ui->lblDate1 << ui->lblDate2 << ui->lblDate3 << ui->lblDate4 << ui->lblDate5;m_weekList << ui->lblWeek0 << ui->lblWeek1 << ui->lblWeek2 << ui->lblWeek3 << ui->lblWeek4 << ui->lblWeek5;m_ApiList << ui->lblQuality0 << ui->lblQuality1 << ui->lblQuality2 << ui->lblQuality3 << ui->lblQuality4 << ui->lblQuality5;m_typeList << ui->lblType0 << ui->lblType1 << ui->lblType2 << ui->lblType3 << ui->lblType4 << ui->lblType5;m_typeIconList << ui->lblTypeIcon0 << ui->lblTypeIcon1 << ui->lblTypeIcon2 << ui->lblTypeIcon3 << ui->lblTypeIcon4 << ui->lblTypeIcon5;m_FXList << ui->lblFx0 << ui->lblFx1 << ui->lblFx2 << ui->lblFx3 << ui->lblFx4 << ui->lblFx5;m_FLList << ui->lblFl0 << ui->lblFl1 << ui->lblFl2 << ui->lblFl3 << ui->lblFl4 << ui->lblFl5;

    QMap <QString,QString> m_typeMap;

2. 右键退出

void contextMenuEvent(QContextMenuEvent* event);

  mExitMenu->exec(QCursor::pos());event->accept();

QMenu* mExitMenu;   右键退出的菜单

 // 右键菜单:退出程序
    mExitMenu = new QMenu(this);//添加一个菜单框
    mExitAct = new QAction();
    mExitAct->setText(tr("退出"));
    mExitAct->setIcon(QIcon(":/res/close.png"));
    mExitMenu->addAction(mExitAct);//把这个行为设置到菜单里面去

    connect(mExitAct, &QAction::triggered, this, [=]() {
        qApp->exit(0); 
    });

3.存放天气信息的类


class Today
{
public:Today(){date = "2022-10-20";city = "广州";ganmao = "感冒指数";wendu = 0;shidu = "0%";pm25 = 0;quality = "无数据";type = "多云";fl = "2级";fx = "南风";high = 30;low = 18;}QString date;QString city;QString ganmao;int wendu;QString shidu;int pm25;QString quality;QString type;QString fx;QString fl;int high;int low;
};class Day
{
public:Day(){date = "2022-10-20";week = "周五";type = "多云";high = 0;low = 0;fx = "南风";fl = "2级";aqi = 0;}QString date;QString week;QString type;QString ymd;int high;int low;QString fx;QString fl;int aqi;
};

4.get请求数据

void MainWindow::getWeaterInfo(QString cityName)
{QString cityCode=weatherTool::getCityCode(cityName);qDebug()<<"cityCode"<<cityCode;QUrl url("http://t.weather.itboy.net/api/weather/city/"+cityCode);m_netAccessManager->get(QNetworkRequest(url));//发送get请求
}

5.重写void onReplied函数

void onReplied(QNetworkReply* reply);在get请求成功之后此函数被调用

void MainWindow::onReplied(QNetworkReply *reply)
{qDebug()<<"onReplied success";int status_code=reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();qDebug()<<"参数: "<<reply->operation();qDebug()<<"状态码: "<<status_code;qDebug()<<"url: "<<reply->url();qDebug()<<"请求头: "<<reply->rawHeaderList();if(reply->error()!=QNetworkReply::NoError||status_code!=200){qDebug()<<reply->errorString().toLatin1().data();QMessageBox::warning(this,"天气预报","数据请求失败",QMessageBox::Ok);}else{QByteArray all=reply->readAll();qDebug()<<"read all : "<<all.data() ;parseJson(all);}reply->deleteLater();}

在此函数里把请求到的数据全部读出来

6.读出类之后在调用parseJson(all);来进行解析JSON数据

void MainWindow::parseJson(QByteArray &byteArray)
{QJsonParseError err;QJsonDocument doc=QJsonDocument::fromJson(byteArray,&err);if(err.error!=QJsonParseError::NoError){qDebug()<<"解析Json出错了";return ;}//Json对象,包括了请求的全部数据QJsonObject rootObj = doc.object();//qDebug() << rootObj;QJsonObject dataObj = rootObj.value("data").toObject();QJsonObject yesterdayObj = dataObj.value("yesterday").toObject();//Json数组,未来几天的数据QJsonArray forecastArray = dataObj.value("forecast").toArray();//1.解析日期和城市QString str = rootObj.value("time").toString();m_today.date= str.split(" ").at(0);qDebug()<<"今天:"<<m_today.date;m_today.city = rootObj.value("cityInfo").toObject().value("city").toString();//2.解析yesterdaym_day[0].date = yesterdayObj.value("date").toString();//日期m_day[0].aqi = yesterdayObj.value("aqi").toDouble();//空气质量,toDouble包括整数型m_day[0].type = yesterdayObj.value("type").toString();//天气类型m_day[0].week = yesterdayObj.value("week").toString();//星期m_day[0].ymd = yesterdayObj.value("ymd").toString();//完整年月日//解析最低温度和最高温度/*QString str = yesterdayObj.value("low").toString();//最低温度str = str.split(" ").at(1);//以空格为分割符,去除前面的文字,取出第二个X℃,str = str.left(str.length() - 1);//去除后面的摄氏度符号mDay[0].low = str.toInt();//传入最低温度str.clear();//清除内容str = yesterdayObj.value("high").toString();//最高温度str = str.split(" ").at(1);//以空格为分割符,去除前面的文字,取出第二个X℃,str = str.left(str.length() - 1);//去除后面的摄氏度符号mDay[0].high = str.toInt();//传入最高温度*///简化版m_day[0].low = parseString(yesterdayObj.value("low").toString());//最低温度m_day[0].high = parseString(yesterdayObj.value("high").toString());//最高温度m_day[0].fx = yesterdayObj.value("fx").toString();//风向m_day[0].fl = yesterdayObj.value("fl").toString();//风力//3.解析forecast中的6天数据for (int i = 0; i < 5; ++i) {QJsonObject forecastData = forecastArray[i].toObject();//跳过0,因为0已经赋值给昨天的数据了m_day[i + 1].date = forecastData.value("date").toString();//日期//qDebug()<<"time: "<<m_day[i + 1].date;m_day[i + 1].aqi = forecastData.value("aqi").toDouble();//空气质量,toDouble包括整数型m_day[i + 1].type = forecastData.value("type").toString();//天气类型m_day[i + 1].week = forecastData.value("week").toString();//星期m_day[i + 1].low = parseString(forecastData.value("low").toString());//最低温度m_day[i + 1].high = parseString(forecastData.value("high").toString());//最高温度m_day[i + 1].fx = forecastData.value("fx").toString();//风向m_day[i + 1].fl = forecastData.value("fl").toString();//风力m_day[i + 1].ymd = forecastData.value("ymd").toString();//完整年月日//ymd分割成MM/dd//QDateTime::fromString(forecastData.value("ymd").toString(), "yyyy-MM-dd").toString("MM/dd");//日期//qDebug() << i << mDay[i + 1].date << mDay[i + 1].aqi << mDay[i + 1].type << mDay[i + 1].week << mDay[i + 1].low << mDay[i + 1].high << mDay[i + 1].fx << mDay[i + 1].fl;//qDebug() << i << mDay[i].date;//qDebug() << mDay[i + 1].ymd;}//4.解析今天的数据m_today.shidu = dataObj.value("shidu").toString();m_today.quality = dataObj.value("quality").toString();m_today.ganmao = dataObj.value("ganmao").toString();m_today.pm25 = dataObj.value("pm25").toDouble();m_today.wendu = dataObj.value("wendu").toString().toInt();//qDebug() << dataObj;//qDebug() << mToday.shidu << mToday.quality << mToday.ganmao << mToday.pm25 << mToday.wendu;//注意:forecast中的第2个元素也是今天的数据m_today.type = m_day[1].type;qDebug()<<"今天的天气是: "<<m_today.type;m_today.low = m_day[1].low;m_today.high = m_day[1].high;m_today.fx = m_day[1].fx;m_today.fl = m_day[1].fl;//qDebug() << mToday.type << mToday.low << mToday.high << mToday.fx << mToday.fl;UpdateUi();//更新曲线在搜索城市完成后手动更新曲线ui->lblHighCurve->update();ui->lblLowCurve->update();
}

解析完JSON数据之后在更新ui(UpdateUi();)

7.更新UI

void MainWindow::UpdateUi()
{ui->lblDate->setText(QDateTime::fromString(m_today.date,"yyyyMMdd").toString("yyyy/MM/dd")+" "+m_day[1].week);ui->lblCity->setText(m_today.city);//更新今天数据ui->lblTypeIcon->setPixmap(m_typeMap[m_today.type]);//更新图片ui->lblTemp->setText(QString ::number(m_today.wendu));ui->lblType->setText(m_today.type);ui->lblLowHigh->setText(QString ::number(m_today.low)+"℃ ~ "+QString::number(m_today.high)+"℃");ui->lblGanMao->setText("感冒指数: "+m_today.ganmao);ui->lblWindFl->setText(m_today.fl);ui->lblWindFx->setText(m_today.fx);ui->lblPM25->setText(QString::number(m_today.pm25));ui->lblShiDu->setText(m_today.shidu);ui->lblQuality->setText(m_today.quality);//更新六天for(int i=0;i<6;i++){//更新日期和时间m_weekList[i]->setText("周"+m_day[i].week.right(1));//从右边取第一个ui->lblWeek0->setText("昨天");ui->lblWeek1->setText("今天");ui->lblWeek2->setText("明天");//         //把日期提取出来变成 10/10格式QStringList slist=m_day[i].ymd.split("-");qDebug()<<slist;m_dateList[i]->setText(slist.at(1)+"/"+slist.at(2));//更新天气类型m_typeList[i]->setText(m_day[i].type);m_typeIconList[i]->setPixmap(m_typeMap[m_day[i].type]);//更新图片
//空气质量switch (checkedQulity(m_day[i].aqi)) {case 1:m_ApiList[i]->setText("优");m_ApiList[i]->setStyleSheet("background-color: rgb(121,184,0);");break;case 2:m_ApiList[i]->setText("良");m_ApiList[i]->setStyleSheet("background-color: rgb(255,187,23);");break;case 3:m_ApiList[i]->setText("轻度");m_ApiList[i]->setStyleSheet("background-color: rgb(255,87,97);");break;case 4:m_ApiList[i]->setText("中度");m_ApiList[i]->setStyleSheet("background-color: rgb(235,17,27);");break;case 5:m_ApiList[i]->setText("重度");m_ApiList[i]->setStyleSheet("background-color: rgb(170,0,0);");break;case 6:m_ApiList[i]->setText("严重");m_ApiList[i]->setStyleSheet("background-color: rgb(110,0,0);");break;}//风力风向m_FXList[i]->setText(m_day[i].fx);m_FLList[i]->setText(m_day[i].fl);}}//检查空气质量
int MainWindow::checkedQulity(int aqi)
{if (aqi >= 0 && aqi <= 50) {return 1;}else if(aqi > 50 && aqi <= 100){return 2;}else if(aqi > 100 && aqi <= 150){return 3;}else if(aqi > 150 && aqi <= 200){return 4;}else if(aqi > 200 && aqi <= 250){return 5;}else{return 6;}return -1;
}

8.实现搜索框搜索城市

获取LeCity搜索框输入的数据

void MainWindow::on_btnSearch_clicked()
{QString cityName=ui->leCity->text();getWeaterInfo(cityName);
}

天气工具类

//天气工具类
class weatherTool{
private://内联静态变量 在占用调用处的内存inline static QMap<QString,QString> m_cityMap={};static void initCityMap(){QFile fd("E:\\code\\citycode.json");fd.open(QIODevice::ReadOnly|QIODevice::Text);QByteArray allJson=fd.readAll();fd.close();QJsonParseError err;//读出的数据转换为json的QJsonDocument doc=  QJsonDocument::fromJson(allJson,&err);if(err.error!=QJsonParseError::NoError||!doc.isArray()){//不是数组就错误qDebug()<<"json数据转换失败...";return;}  //转换成json数组QJsonArray rootArray=doc.array();for(int i=0;i<rootArray.size();i++){QString cityName = rootArray[i].toObject().value("city_name").toString();QString cityCode = rootArray[i].toObject().value("city_code").toString();//判断编号是否存在if(cityCode.size()>0){m_cityMap.insert(cityName,cityCode);}}}public :QString static getCityCode(QString cityName){qDebug()<<"cityName"<<cityName;if(m_cityMap.isEmpty()){qDebug()<< m_cityMap.isEmpty();initCityMap();}if(cityName==""){QMessageBox::warning(nullptr,"错误(null)","输入的城市不能为空...",QMessageBox::Ok);return "";}//在map寻找传入的城市名称,返回值可以遍历//返回的是map中的多个元素QMap<QString, QString>::iterator it = m_cityMap.find(cityName);//到结尾了,未找到,加上市,再搜一遍if (it == m_cityMap.end()) {it = m_cityMap.find(cityName + "市");}//找到了if (it != m_cityMap.end()) {qDebug()<<" if (it != m_cityMap.end())";return it.value();}QMessageBox::warning(nullptr,"城市名字错误","输入的城市名字错误...",QMessageBox::Ok);//否则return "";}};

读取这个文件里面的数据QFile fd("E:\\code\\citycode.json");把city_name和city_code取出来放到QMap集合里面去,之后在和输入的CityName进行查找获得city_code.

 

 

相关文章:

QT实现天气预报

1. MainWindow类设计的成员变量和方法 public: MainWindow(QWidget* parent nullptr); ~MainWindow(); protected: 形成文本菜单来用来右键关闭窗口 void contextMenuEvent(QContextMenuEvent* event); 鼠标被点击之后此事件被调用 void mousePressEvent(QMouseEv…...

【马蹄集】第二十三周——进位制专题

进位制专题 目录 MT2186 二进制&#xff1f;不同&#xff01;MT2187 excel的烦恼MT2188 单条件和MT2189 三进制计算机1MT2190 三进制计算机2 MT2186 二进制&#xff1f;不同&#xff01; 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目…...

[足式机器人]Part3 变分法Ch01-1 数学预备知识——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《变分法基础-第三版》老大中 《变分学讲义》张恭庆 《Calculus of Variations of Optimal Control Theory》-变分法和最优控制论-Daneil Liberzon Ch01-1 数学基础-预备知识1 1 数学基础-预备知识1.1 泰勒公式1.1.1 一元函数的泰勒公式…...

计算机网络----CRC冗余码的运算

目录 1. 冗余码的介绍及原理2. CRC检验编码的例子3. 小练习 1. 冗余码的介绍及原理 冗余码是用于在数据链路层的通信链路和传输数据过程中可能会出错的一种检错编码方法&#xff08;检错码&#xff09;。原理&#xff1a;发送发把数据划分为组&#xff0c;设每组K个比特&#…...

将Nginx源码数组结构(ngx_array.c)和内存池代码单独编译运行,附代码

在上面一篇的基础上把Nginx源码数组结构也摘录下来&#xff0c;也增加了测试代码&#xff0c;编译运行。 https://blog.csdn.net/katerdaisy/article/details/132358883 《将nginx内存池代码单独编译运行&#xff0c;了解nginx内存池工作原理&#xff0c;附代码》 核心代码&…...

java forEach中不能使用break和continue的原因

1.首先了解break和continue的使用范围和作用 1.1使用范围 break适用范围&#xff1a;只能用于switch或者是循环语句中。当然可以用于增强for循环。 continue适用范围: 用于循环语句中。 1.2作用 break: 1. break用于switch语句的作用是结束一个switch语句。 2. break用于循…...

[杂项]水浒英雄谱系列电影列表

年份 片名 导演 主演 2006-01-01 母夜叉孙二娘 张建亚 周海媚 、 莫少聪 、 于承惠 [1] 2008-01-01 碧瑶霜迷案 黄祖权 陈龙 、 陈德容 、 翁家明 [7] 2008-05-09 青面兽杨志 张建亚 吕良伟 、 计春华 、 孟广美 [2] 2008-05-09 扈三娘与矮脚虎王英 张建亚 曾宝仪 、 郭德纲 、…...

6.RocketMQ之索引文件ConsumeQueue

本文着重分析为consumequeue/topic/queueId目录下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface>> consumeQueueTable;public boolean load(…...

【C++学习手札】一文带你认识C++虚继承​​

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a;C虚函数&#xff08;很重要&#xff0c;内部剖析&#xff09; ♈️今日夜电波&#xff1a;僕らのつづき—柊優花 1:06 ━━━━━━️&#x1f49f;──────── 3:51 …...

神经网络基础-神经网络补充概念-63-残差网络

概念 残差网络&#xff08;Residual Network&#xff0c;ResNet&#xff09;是一种深度卷积神经网络结构&#xff0c;旨在解决深层网络训练中的梯度消失和梯度爆炸问题&#xff0c;以及帮助训练非常深的网络。ResNet 在2015年被提出&#xff0c;其核心思想是引入了"残差块…...

【从0开始学架构笔记】01 基础架构

文章目录 一、架构的定义1. 系统与子系统2. 模块与组件3. 框架与架构4. 重新定义架构 二、架构设计的目的三、复杂度来源&#xff1a;高性能1. 单机复杂度2. 集群复杂度2.1 任务分配2.2 任务分解&#xff08;微服务&#xff09; 四、复杂度来源&#xff1a;高可用1. 计算高可用…...

vue3+ts+vite使用el-breadcrumb实现面包屑组件,实现面包屑过渡动画

简介 使用 element-plus 的 el-breadcrumb 组件&#xff0c;实现根据页面路由动态生成面包屑导航&#xff0c;并实现面包屑导航的切换过渡动画 一、先看效果加粗样式 1.1 静态效果 1.2 动态效果 二、全量代码 <script lang"ts" setup> import { ref, watch…...

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)四(116)

需求&#xff1a;&#xff1a;前端根据后端的返回数据&#xff1a;画统计图&#xff1b; 1.动态获取地域数据以及数据中的平均值&#xff0c;按照平均值降序排序&#xff1b; 说明&#xff1a; X轴是动态的&#xff0c;有对应区域数据则展示&#xff1b; X轴 区域数据降序排序…...

Chrome命令行开关

Electron 支持的命令行开关 –client-certificatepath 设置客户端的证书文件 path . –ignore-connections-limitdomains 忽略用 , 分隔的 domains 列表的连接限制. –disable-http-cache 禁止请求 HTTP 时使用磁盘缓存. –remote-debugging-portport 在指定的 端口 通…...

元宇宙赛道加速破圈 和数软件抓住“元宇宙游戏”发展新风口

当下海外游戏市场仍然具备较大的增长空间。据机构预测&#xff0c;至2025年全球移动游戏市场规模将达1606亿美元&#xff0c;对应2020-2025年复合增长率11&#xff05;。与此同时&#xff0c;随着元宇宙概念持续升温&#xff0c;国内外多家互联网巨头纷纷入场。行业分析平台New…...

Vue的鼠标键盘事件

Vue的鼠标键盘事件 原生 鼠标事件(将v-on简写为) click // 点击 dblclick // 双击 mousedown // 按下 mousemove // 移动 mouseleave // 离开 mouseout // 移出 mouseenter // 进入 mouseover // 鼠标悬浮mousedown.left 键盘事件 keydown //键盘按下时触发 keypress …...

Bytebase 2.6.0 - ​支持通过 LDAP 配置 SSO,支持 RisingWave 数据库

&#x1f680; 新功能 支持通过 LDAP 配置 SSO。支持增加多个只读连接。Schema 模版支持列类型约束。支持 RisingWave 数据库。库表同步功能支持 TiDB。数据脱敏功能支持 SQL Server。SQL 审核 CI 功能支持 Azure DevOps。 &#x1f384; 改进 支持设置数据库的环境与所属实…...

C# 读取pcd、ply点云文件数据

最近研究了下用pcl读取点云数据&#xff0c;又做了个C#的dll&#xff0c;方便读取&#xff0c;同样这个dll基于pcl 最新版本1.13.1版本开发。 上次做的需要先得到点云长度&#xff0c;再获取数据。这次这个定义了一个PointCloudXYZ类来存数据。将下面的dll拷贝到可执行目录下&a…...

LeetCode1387 将整数按权重排序

思路 首先是这种计算权重的方式很有可能出现重复&#xff0c;所以需要记忆化搜索记忆化搜索&#xff1a;先查表再计算&#xff0c;先存表再返回。将整数 x 和计算的权重分别存储数组的0和1的位置重写compare将数组排序按规则排序返回结果 代码 class Solution {private Hash…...

正则表达式--Intellij IDEA常用的替换

原文网址&#xff1a;正则表达式--Intellij IDEA常用的替换_IT利刃出鞘的博客-CSDN博客 简介 本文介绍IDEA使用正则表达式进行替换时的常用的一些示例。 根据注释加注解 需求 将 /*** abc*/ 改为&#xff1a; /*** abc*/ ApiModelOperation("abc") 方法 选…...

前端如何安全的渲染HTML字符串?

在现代的Web 应用中&#xff0c;动态生成和渲染 HTML 字符串是很常见的需求。然而&#xff0c;不正确地渲染HTML字符串可能会导致安全漏洞&#xff0c;例如跨站脚本攻击&#xff08;XSS&#xff09;。为了确保应用的安全性&#xff0c;我们需要采取一些措施来在安全的环境下渲染…...

C++学习第十四天----for循环

1.递增/递减运算符和指针 将*和同时用于指针的优先级&#xff1f; 答&#xff1a;前缀递增&#xff0c;前缀递减和解除引用运算符的优先级相同&#xff0c;以从右到左的方式进行结合&#xff1b;后缀递增和后缀递减的优先级相同&#xff0c;但比前缀运算符的优先级高&#xff0…...

快速解决在进入浏览器时,明明连接了网络,但是显示你尚未连接,代理服务器可能有问题。

在进入浏览器时&#xff0c;明明连接了网络&#xff0c;但是显示你尚未连接&#xff0c;代理服务器可能有问题&#xff0c;如下图。 一般情况下&#xff0c;可能是因为你使用了某些VPN&#xff0c;然后VPN使用时修改了你的网络设置&#xff0c;我们可以通过以下方法快速解决。 …...

TypeScript入门指南

TypeScript学习总结内容目录&#xff1a; TypeScript概述 TypeScript特性。Javascript与TypeScript的区别 * TypeScript安装及其环境搭建TypeScript类型声明 * 单个类型声明&#xff0c;多个类型声明 * 任意类型声明 * 函数类型声明 * unknown类型…...

excel中定位条件,excel中有哪些数据类型、excel常见错误值、查找与替换

一、如何定位条件 操作步骤&#xff1a;开始 - 查找和选择 - 定位条件&#xff08;ctrl G 或 F5&#xff09; 注&#xff1a;如果F5不可用&#xff0c;可能是这个快捷键被占用了 案例&#xff1a;使用定位条件选择取余中空单元格&#xff0c;填入100&#xff0c;按组合键ct…...

19c_ogg搭建

1.环境介绍 源端&#xff1a;192.168.56.101 目标端&#xff1a;192.168.56.100 背景&#xff1a;数据从主库cdb主机定位&#xff0c;同步到从库 2.配置ogg 2.1 开启归档、强制日志、补充日志 --ogg 主备都需要配置 SQL> alter database archivelog; SQL> alter databa…...

网络通信原理网络层TCP/IP协议(第四十三课)

1.什么是TCP/IP 目前应用广泛的网络通信协议集 国际互联网上电脑相互通信的规则、约定。 2.主机通信的三要素 IP地址:用来标识一个节点的网络地址(区分网络中电脑身份的地址,如人有名字) 子网掩码:配合IP地址确定网络号 IP路由:网关的地址,网络的出口 3.IP地址 …...

yolov5封装进ros系统

一&#xff0c;要具备ROS环境 ROS环境搭建可以参考我之前的文章 ROS参考文章1 ROS参考文章2   建立ROS工作空间 ROS系统由自己的编译空间规则。 cd 你自己想要的文件夹&#xff08;我一般是home目录&#xff09; mkdir -p (你自己的文件夹名字&#xff0c;比如我是yolov5…...

Flowable 源码目录结构

title: Flowable 源码目录结构 date: 2023-8-17 23:47:20 tags: - Flowable 下载源码 下载地址&#xff1a;flowable/flowable-engine at flowable-6.7.2 (github.com) Git 下载方式&#xff1a;git clone gitgithub.com:flowable/flowable-engine.git 切换分支 git checkout -…...

科大讯飞星火模型申请与chatgpt 3.5模型以及new bing的对比

科大讯飞星火模型 申请科大讯飞星火认知大模型账号科大讯飞星火认知大模型使用1.界面介绍2. 在编程能力上与chatgpt 3.5对比科大讯飞星火模型chatgpt 3.5模型 3. 在图片生成能力上与new bing对比 总结 申请科大讯飞星火认知大模型账号 注册网址&#xff1a; 科大讯飞星火认知大…...