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

qt6 获取百度地图(一)

需求分析:

要获取一个地图,

需要ip

需要根据ip查询经纬度

根据经纬度查询地图

另外一条线是根据输入的地址 查询ip 根据查询到的ip查地图‘

最后,要渲染地图

上面这这些动作,要进行http查询:

为此要有三个QNetworkAccessManager对象:

    QNetworkAccessManager *m_ipManager;  // 用于ip管理QNetworkAccessManager *m_locManager;   // 用于查询位置//网络管理对象  发送地图图片QNetworkAccessManager *m_mapManager;   //查询地图//响应对象 接收地图图片QNetworkReply *m_mapReply=NULL;   //响应

所有的查询动作当然能顺序执行:

如先查询ip

    等待获取IP返回结果

         如果IP返回了,发起根据IP查询经纬度的请求

                等待经纬度查询结果,如果获得的返回,则进一步根据返回的经纬度查询地图数据

                         等待地图数据查询结果,把结果写入文件

                                  从文件中读取数据,渲染到weigt上

但是 如果其中某个环节网络断了 或者百度服务器宕机了,系统就会卡死。

按上面步骤,网络请求是同步顺序,执行来的,用户界面可能会阻塞,用户体验欠佳。

为此我们引入槽函数机制!让网络请求是异步进行,用户界面不会阻塞,这提供了更好的用户体验!

在构造函数中,添加如下代码:

Form1::Form1(QWidget *parent): QWidget(parent), ui(new Ui::Form1)
{ui->setupUi(this);//new一个网络管理对象m_ipManager = new QNetworkAccessManager(this);  //  net connection tool ,duty is to connect to the server//declare  connect relationship ,when receive the response ,call the slot function,response is finished signalconnect(m_ipManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onGetIp(QNetworkReply*)));m_locManager=new QNetworkAccessManager(this);  //net connection tool ,duty is to connect to the server for location//declare  connect relationship ,when receive the response ,call the slot function,response is finished signalconnect(m_locManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onGetCurrentLoc(QNetworkReply*)));m_mapManager=new QNetworkAccessManager(this);   //net connection tool ,duty is to connect to the server for map query mapconnect(m_mapManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onSendMapRequest()));
}

和上面connect函数配套的也有三个槽函数,当网络请求有响应的时候,执行响应的槽函数。

配套的三个槽函数,在头文件中 declare如下图:

private slots://处理获取外网ip请求的 槽void onGetIp(QNetworkReply*);//根据ip获取经纬度  处理服务器响应内容void onGetCurrentLoc(QNetworkReply*);//处理服务器返回地图图片void onSendMapRequest();

这样,所有网络查询与处理事异步进行的。

让我们从查询Ip地址起步:

首先通过QNetworkAccessManager 一个实例对象 m_ipManager发起一个request请求。

void Form1::getIp()
{// by m_ipManager query ipQUrl url("http://httpbin.org/ip");  //declare the urlQNetworkRequest request(url);  //declare the requestm_ipManager->get(request);   //send the request
}

这个请求的响应?

嗯嗯,当然在槽函数当中了~~~ 窗体的构造函数中不是“声明”了一个“连接”吗

 connect(m_ipManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onGetIp(QNetworkReply*)));

当网络请求有相应的回来的时候,执行槽函数onGetIp,

在这个onGetIp函数中,我们取得服务端返回数据,从中解析出ip地址,进一步的, 我们会根据ip地址查询经纬度数据。

void Form1::onGetIp(QNetworkReply *reply)
{//get the ip address,by ip value query the locationQJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());QJsonObject jsonObj = jsonDoc.object();currentIp=jsonObj.value("origin").toString();qDebug() << "Current IP:" << currentIp;//by ip value query the locationgetLocation();}void Form1::getLocation()
{//by ip address ,query the locationQUrl url("http://api.map.baidu.com/location/ip?ip="+currentIp+"&ak="+ak);QNetworkRequest request(url);m_locManager->get(request);
}

上面查询经纬度数据的时候,用的是QNetworkAccessManager 一个实例对象 m_locManager,当这个对象发起request请求后,它的工作就算完成了。

结果?结果当然是另外一个槽函数来处理了。

connect(m_locManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onGetCurrentLoc(QNetworkReply*)));

 onGetCurrentLoc这个槽函数中,获取上一步request查询结果,从结果中解析出经纬度,根据经纬度的数据,调用查询地图数据的函数。

完整代码如下:

//json数据的一个样本如下
// {
//     "address": "CN|辽宁省|大连市|None|None|100|75",
//     "content": {
//         "address_detail": {
//             "province": "辽宁省",
//             "city": "大连市",
//             "district": "",
//             "street": "",
//             "street_number": "",
//             "city_code": 167,
//             "adcode": "210200"
//         },
//         "address": "辽宁省大连市",
//         "point": {
//             "x": "13539005.4",
//             "y": "4682974.61"
//         }
//     },
//     "status": 0
// }void Form1::onGetCurrentLoc(QNetworkReply * reply)
{//根据经纬度发起查询地图QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());//parse the json data,get the location data from the json dataQJsonObject jsonObj = jsonDoc.object();QJsonObject contentObj = jsonObj.value("content").toObject();QJsonObject pointObj = contentObj.value("point").toObject();m_lng = pointObj.value("x").toString().toDouble();m_lat = pointObj.value("y").toString().toDouble();qDebug() << "经度:" << m_lng << "纬度:" << m_lat;//根据经纬度发起查询地图请求//发起查询地图请求sendMapRequest();}

到这一步,我们可以先测试一下:~~~~~~~~~~~~

看上去一切正常!

其中,sendMapRequest,当然是用一个对象发起一个请求,结果同样是在对应的槽函数当中处理

sendMapRequest完整代码如下:

void Form1::sendMapRequest()
{//by location query the map, use  m_mapManagerQString url="http://api.map.baidu.com/staticimage/v2?ak="+ak+"&center="+QString::number(m_lng)+","+QString::number(m_lat)+"&width=1024&height=768&zoom="+QString::number(m_zoom);QNetworkRequest request(url);m_mapManager->get(request);
}

好了吗?且慢,网络查询获取的地图数据,也只能是应答对象reply,给出完成型号的时候,才能进行,就是说,构造函数中 connect(m_mapManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onSendMapRequest()));  不是很合适,那就改造它,

构造函数相关代码改造为:

Form1::Form1(QWidget *parent): QWidget(parent), ui(new Ui::Form1)
{ui->setupUi(this);//new一个网络管理对象m_ipManager = new QNetworkAccessManager(this);  //  net connection tool ,duty is to connect to the server//declare  connect relationship ,when receive the response ,call the slot function,response is finished signalconnect(m_ipManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onGetIp(QNetworkReply*)));m_locManager=new QNetworkAccessManager(this);  //net connection tool ,duty is to connect to the server for location//declare  connect relationship ,when receive the response ,call the slot function,response is finished signalconnect(m_locManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onGetCurrentLoc(QNetworkReply*)));m_mapManager=new QNetworkAccessManager(this);  //注释掉下面的行  只有收到reply发出的准备好信号 我们才能读取数据,保存到文件当中// connect(m_mapManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onSendMapRequest()));
}

只有reply发出准备好可以读数据的信号后,才能,触发对应的槽函数:由于读取文件数据是个昂贵的资源,所以我们要

 void  MainWindow::sendMapRequest(){//how//断调前一次请求if(m_mapReply!=NULL){m_mapReply->disconnect();//断掉事件连接disconnect(m_mapReply,&QIODevice::readyRead,this,&MainWindow::onSendMapRequest);}//开始新的请求//url//请求地址QString host= "http://api.map.baidu.com/staticimage/v2";//请求参数QString query_str=QString("ak=%1&width=512&height=256&center=%2,%3&zoom=%4").arg(ak).arg(m_lng).arg(m_lat).arg(m_zoom);QUrl url(host+"?"+query_str);qDebug()<<host+"?"+query_str<<endl;QNetworkRequest request(url);//此处与前面的请求不同,等待服务器响应,m_mapReply= m_mapManager->get(request);//连接事件,处理服务器返回的 文件流connect(m_mapReply,&QIODevice::readyRead,this,&MainWindow::onSendMapRequest);}

获取地图数据是个相对比较昂贵的操作,假如原来有个正在处理的响应呢,当然应该断掉原来的响应啊。所有有了下面的代码:

     //断调前一次请求if(m_mapReply!=NULL){m_mapReply->disconnect();//断掉事件连接disconnect(m_mapReply,&QIODevice::readyRead,this,&MainWindow::onSendMapRequest);}

回顾上面的代码sendMapRequest中执行的动作为:

断开原有的http连接

断开reply相关的槽函数链接

通过http发起查询地图的连接

建了信号与槽函数间的联系,通过槽函数,处理数据,。

最后一步:如何把读取到的数据存放到文件中,且渲染到weight当中呢?

且听下回分解,明天见!

ps:   测试根据ip查询经纬度的数据:http://api.map.baidu.com/location/ip?ip=42.84.232.111&ak=***********

ps:问题1:qt6 处理图像的基本步骤:

在Qt6中处理图像的基本步骤通常涉及以下几个关键方面,以及所使用的核心工具类。以下是一个简要的描述:

基本步骤

  1. 创建图像对象
    首先,需要创建一个QImageQPixmap对象来存储或处理图像。QImage是一个类,用于处理图像数据,支持多种图像格式和色彩深度,包括灰度图像、彩色图像和索引图像。它提供了丰富的图像处理功能,如读取、写入、转换图像格式等。

  2. 读取图像数据
    使用QImageload()函数从文件、数据流或其他源中读取图像数据。这个函数支持多种图像格式,如PNG、JPEG、BMP等。

  3. 处理图像
    通过QImage提供的各种函数对图像进行处理,如缩放、裁剪、旋转、颜色转换等。Qt6还提供了更高级的图像处理功能,如滤镜效果、图像分析等,这些功能可能通过其他类库(如Qt Image Processing模块)实现。

  4. 显示图像
    将处理后的图像显示在界面上,通常可以通过将QImage转换为QPixmap(如果需要的话),然后使用QLabelQGraphicsView等控件进行显示。

  5. 保存图像
    如果需要,可以将处理后的图像保存回文件或其他存储介质。使用QImagesave()函数可以实现这一功能。

用到的工具类

  • QImage:用于处理图像数据,包括读取、写入、转换格式和进行基本的图像处理。
  • QPixmap:与QImage类似,但优化了图像在屏幕上的显示性能。通常用于将图像显示在GUI控件中。
  • QPainter:虽然主要用于绘图,但在图像处理过程中也可以用来在图像上绘制图形或文本,实现更复杂的图像处理效果。
  • 其他Qt图像处理模块:Qt可能还提供了其他专门的图像处理模块,如Qt Image Processing,这些模块提供了更高级的图像处理功能。

综上所述,Qt6处理图像的基本步骤包括创建图像对象、读取图像数据、处理图像、显示图像和保存图像,而用到的核心工具类主要是QImageQPixmap,辅以QPainter和其他可能的Qt图像处理模块。

问题2:qt6 用QPainter绘制图像有哪些功能,具体步骤是什么

在Qt6中,QPainter是用于在各种绘制设备(如窗口、图片等)上进行绘图的强大工具类。使用QPainter绘制图像时,它提供了丰富的功能,包括但不限于:

  1. 基本图形绘制:可以绘制点、线、矩形、圆形、椭圆等基本图形,以及更复杂的形状如多边形、扇形等。

  2. 文本绘制:支持绘制文本,并可以设置文本的字体、颜色、位置等属性。

  3. 图像绘制:可以直接在绘图设备上绘制图像(如QImageQPixmap中的图像)。

  4. 变换:支持坐标变换,如平移、旋转、缩放等,以实现对图形的变换处理。

具体步骤通常包括:

  1. 创建QPainter对象:在绘图事件处理函数(如paintEvent)中创建QPainter对象,并指定绘图设备(如this指针,表示在当前窗口上绘图)。

  2. 设置绘制属性:根据需要设置画笔(QPen)、画刷(QBrush)、字体(QFont)等属性。

  3. 进行绘图操作:使用QPainter提供的绘图函数进行绘图,如drawLinedrawRectdrawText等。

  4. 结束绘图:绘图完成后,QPainter对象会自动销毁,或者可以显式调用其end()方法来结束绘图操作(尽管在自动管理的上下文中通常不需要)。

通过这些步骤,开发者可以在Qt6应用程序中实现丰富的图形绘制功能。

问题3:QPainter 与 QImage QPixmap 的关系是什么

QPainter、QImage和QPixmap在Qt框架中各自扮演着重要的角色,并且它们之间存在着紧密的关系。以下是对这三者之间关系的详细阐述:

1. QPainter

  • 功能:QPainter是Qt中用于在绘图设备上进行绘图的类。它提供了丰富的绘图函数,如绘制线条、形状、文本以及图像等。
  • 与QImage和QPixmap的关系:QPainter可以作用于QImage和QPixmap上,进行图像的绘制和编辑。这意味着,你可以使用QPainter在QImage或QPixmap对象上绘制图形、文本或其他图像。

2. QImage

  • 功能:QImage是Qt中用于处理图像数据的类。它提供了对图像像素的直接访问,允许进行图像的读取、写入、转换以及像素级别的操作。
  • 与QPainter的关系:QImage是QPaintDevice的子类,因此QPainter可以直接在其上进行绘制。这使得QImage成为一个非常灵活的绘图表面,可以在其上绘制图形、文本或其他图像。
  • 特点:QImage不依赖于底层硬件,提供了独立于平台的图像处理能力。它支持多种图像格式和色彩深度,并允许在多个线程中进行图像的读取和写入操作。

3. QPixmap

  • 功能:QPixmap是Qt中专门用于在屏幕上显示图像优化的类。它针对屏幕显示进行了优化,能够提供更好的性能和显示效果。
  • 与QPainter的关系:与QImage类似,QPixmap也是QPaintDevice的子类,因此QPainter同样可以在其上进行绘制。但是,由于QPixmap是为屏幕显示而优化的,因此它更适合在GUI应用程序中使用。
  • 特点:QPixmap依赖于底层平台的绘制系统,因此在不同的操作系统上可能会有不同的显示效果。此外,由于它针对屏幕显示进行了优化,因此在处理大型图像或进行复杂图像处理时可能会比QImage慢。

4. 关系总结

  • 绘图功能:QPainter是绘图工具,可以在QImage和QPixmap上进行绘图操作。
  • 图像数据:QImage和QPixmap都是用于处理图像数据的类,但它们的用途和优化方向有所不同。QImage提供了像素级别的访问和操作,而QPixmap则优化了屏幕显示性能。
  • 相互转换:QImage和QPixmap之间可以进行相互转换。可以使用QPixmap的toImage()函数将其转换为QImage,或者使用QImage的QPixmap::fromImage()静态函数将其转换为QPixmap。这种转换使得开发者可以根据需要选择最适合当前任务的图像处理类。

综上所述,QPainter、QImage和QPixmap在Qt中共同构成了强大的图像处理和绘图功能体系。它们之间的关系使得开发者可以灵活地选择和使用这些类来满足不同的图像处理和绘图需求。

问题4:不是可以这样比喻 qt6中 QPainter 是画家,QPixmap 是画布 QPen 是画笔 QPainter 这个画家可以使用QPen 这个画笔 在 QPixmap 这个画布上绘制图形

这个比喻非常贴切且易于理解!在Qt6的上下文中,我们可以这样描述这三个类之间的关系:

  • QPainter 确实是“画家”,它负责执行绘制操作,将图形、文本或其他图像绘制到指定的绘图设备(如窗口、图像等)上。QPainter提供了丰富的绘图函数,使得开发者可以像画家一样在绘图设备上进行创作。

  • QPixmap 可以被看作是“画布”,它是专门为屏幕显示而优化的图像表示。QPixmap对象可以作为QPainter的绘图设备,让QPainter在其上进行绘制。就像画家在画布上作画一样,QPainter可以在QPixmap上绘制各种图形和图像。

  • QPen 则是“画笔”,它定义了绘制线条时的样式,包括颜色、宽度、线型(如实线、虚线等)和线帽样式等。通过设置QPen的属性,开发者可以控制QPainter绘制线条时的外观。虽然QPen主要用于绘制线条,但它也间接影响了其他需要线条的图形(如矩形边框、圆形轮廓等)的绘制效果。

因此,你的比喻“QPainter 是画家,QPixmap 是画布,QPen 是画笔,QPainter 这个画家可以使用QPen 这个画笔在QPixmap 这个画布上绘制图形”是非常准确的。这个比喻不仅直观地表达了这三个类之间的关系,还帮助开发者更好地理解它们在Qt6图像处理和绘图功能中的作用。

布局:

相关文章:

qt6 获取百度地图(一)

需求分析&#xff1a; 要获取一个地图&#xff0c; 需要ip 需要根据ip查询经纬度 根据经纬度查询地图 另外一条线是根据输入的地址 查询ip 根据查询到的ip查地图‘ 最后&#xff0c;要渲染地图 上面这这些动作&#xff0c;要进行http查询&#xff1a; 为此要有三个QNet…...

overlap的uORF对TE的抑制程度为什么显著高于non-overlap的uORF

在翻译调控中&#xff0c;上游开放阅读框&#xff08;uORFs&#xff09;对主开放阅读框&#xff08;main ORF&#xff09;的抑制效果有很大差异&#xff0c;尤其是重叠的uORFs&#xff08;overlap uORFs&#xff09;通常比非重叠的uORFs&#xff08;non-overlap uORFs&#xff…...

面向高精度导航定位领域的UM980RTK定位模块

UM980 是和芯星通自主研发的新一代 BDS/GPS/GLONASS/Galileo/QZSS 全系统全频高精度 RTK 定位模块&#xff0c;基于和芯星通自主研发的新一代射频基带及高精度算法一体化GNSS SoC 芯片—NebulasIV 设计。可同时跟踪 BDS, GPS, GLONASS, Galileo, QZSS, NavIC, SBAS, L-Band* 等…...

145-四路16位125Msps AD FMC子卡模块

一、概述 该板卡可实现4路16bit 125Msps AD 功能&#xff0c;是xilinx开发板设计的标准板卡。FMC连接器是一种高速多pin的互连器件&#xff0c;广泛应用于板卡对接的设备中&#xff0c;特别是在xilinx公司的所有开发板中都使用。该AD&#xff0c;DA子卡模块就专门针对xilinx开发…...

服务器被劫持

当服务器被劫持时&#xff0c;可以采取一系列措施来修复和加强安全防护&#xff0c;确保服务器的安全性和数据的完整性。以下是一些建议的步骤和策略&#xff1a;12 确认服务器被劫持&#xff1a;首先需要确认服务器是否被劫持。这可以通过检查服务器的日志、网络流量、以及任…...

康姿百德磁性床垫好不好,效果怎么样靠谱吗

康姿百德典雅款床垫&#xff0c;打造舒适睡眠新体验 康姿百德床垫是打造舒适睡眠新体验的首选&#xff0c;其设计能够保护脊椎健康&#xff0c;舒展脊椎&#xff0c;让您享受一夜好眠。康姿百德床垫的面料选择也非常重要&#xff0c;其细腻亲肤的针织面料给您带来柔软舒适的触…...

[吃瓜教程]南瓜书第5章神经网络

1.M-P神经元 M-P神经元&#xff0c;全称为McCulloch-Pitts神经元&#xff0c;是一种数学模型&#xff0c;用于模拟生物神经元的功能。这个模型是由Warren McCulloch和Walter Pitts在1943年提出的。它是人工智能和计算神经科学领域中非常重要的早期模型。 M-P神经元接收n个输入…...

装饰模式解析:基本概念和实例教程

目录 装饰模式装饰模式结构装饰模式应用场景装饰模式优缺点练手题目题目描述输入描述输出描述题解 装饰模式 装饰模式&#xff0c;又称装饰者模式、装饰器模式&#xff0c;是一种结构型设计模式&#xff0c;允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行…...

211.xv6——3(page tables)

在本实验室中&#xff0c;您将探索页表并对其进行修改&#xff0c;以简化将数据从用户空间复制到内核空间的函数。 开始编码之前&#xff0c;请阅读xv6手册的第3章和相关文件&#xff1a; kernel/memlayout.h&#xff0c;它捕获了内存的布局。kernel/vm.c&#xff0c;其中包含…...

yum使用报错:ImportError: /lib64/libxml2.so.2: file too short

系统版本&#xff1a;Rocky 8.10 报错信息&#xff1a; Traceback (most recent call last):File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 14, in swig_import_helperreturn importlib.import_module(mname)File "/usr/lib64/python3.6/i…...

【Android面试八股文】你是怎么保证Android设备的时间与服务器时间同步的?(使用NTP和TrueTime方案)

文章目录 一、网络时间协议(NTP)二、使用网络时间协议(NTP)2.1 使用系统提供的 NTP 服务器2.2 使用TrueTime2.2.1 引入TrueTime库2.2.2 初始化 TrueTime2.2.3 用法2.2.4 使用 TrueTime 获取时间2.2.4 自动更新时间2.2.5 注意事项二. 使用 HTTP 请求获取服务器时间2.1. 发送…...

解决Python爬虫开发中的数据输出问题:确保正确生成CSV文件

引言 在大数据时代&#xff0c;爬虫技术成为获取和分析网络数据的重要工具。然而&#xff0c;许多开发者在使用Python编写爬虫时&#xff0c;常常遇到数据输出问题&#xff0c;尤其是在生成CSV文件时出错。本文将详细介绍如何解决这些问题&#xff0c;并提供使用代理IP和多线程…...

SCI一区TOP|徒步优化算法(HOA)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;SO Oladejo受到徒步旅行启发&#xff0c;提出了徒步优化算法&#xff08;Hiking Optimization Algorithm, HOA&#xff09;。 2.算法原理 2.1算法思想 HOA灵感来自于…...

Android的activity广播无法接收,提示process gone or crashing原因有可能是那些?

当Android的Activity无法接收广播&#xff0c;并且收到“process gone or crashing”的提示时&#xff0c;可能的原因有多种。以下是一些常见的原因和排查步骤&#xff1a; Activity生命周期问题&#xff1a; 如果Activity在广播发送之前就已经被销毁&#xff08;例如&#xf…...

如何将等保2.0的要求融入日常安全运维实践中?

等保2.0的基本要求 等保2.0是中国网络安全领域的基本国策和基本制度&#xff0c;它要求网络运营商按照网络安全等级保护制度的要求&#xff0c;履行相关的安全保护义务。等保2.0的实施得到了《中华人民共和国网络安全法》等法律法规的支持&#xff0c;要求相关行业和单位必须按…...

51单片机嵌入式开发:STC89C52环境配置到点亮LED

STC89C52环境配置到点亮LED 1 环境配置1.1 硬件环境1.2 编译环境1.3 烧录环境 2 工程配置2.1 工程框架2.2 工程创建2.3 参数配置 3 点亮一个LED3.1 原理图解读3.2 代码配置3.3 演示 4 总结 1 环境配置 1.1 硬件环境 硬件环境采用“华晴电子”的MINIEL-89C开发板&#xff0c;这…...

源代码加密:保护你的数字宝藏

在当今日益复杂的网络安全环境中&#xff0c;源代码作为企业的核心知识产权&#xff0c;其安全保护显得尤为重要。传统的源代码加密方法虽能提供一定的保护&#xff0c;但在应对新型威胁和复杂场景时&#xff0c;往往显得力不从心。而SDC沙盒技术的出现&#xff0c;为源代码加密…...

Jackson库使用教程

1. Jackson概述 定义: Jackson是一个基于Java的开源JSON解析工具&#xff0c;用于Java对象与JSON数据的互相转换。示例JSON:{"author": "一路向北_Coding","age": 20,"hobbies": ["coding", "leetcode", "r…...

汉王、绘王签字版调用封装

说明 需要配合汉王或绘王签字版驱动以及对应的sdk服务使用 constants.js //汉王、绘王sdk websocket连接地址 export const WS_URLS {1:ws://127.0.0.1:29999, //汉王2:ws://127.0.0.1:7181, }export const COMMAND1 {1: {HWPenSign: "HWStartSign",nLogo: "…...

如何在TikTok上获得更多观看量:12个流量秘诀

TikTok作为热门海外社媒&#xff0c;在跨境出海行业中成为新兴的推广渠道&#xff0c;但你知道如何让你的TikTok赢得更多关注次数吗&#xff1f;如果您正在寻找增加 TikTok 观看次数的方法&#xff0c;接下来这12种策略&#xff0c;你需要一一做好&#xff01; 1. 在内容中添加…...

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法&#xff0c;使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上&#xff0c;所有的vue模板都是语法层面的HTML&#xff0c;可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…...

13 Redis-- 数据一致性模型、MySQL 和 Redis 的数据一致性

数据一致性模型 根据一致性的强弱分类&#xff0c;可以将一致性模型按以下顺序排列&#xff1a; 强一致性 > 最终一致性 > 弱一致性 数据一致性模型一般用于分布式系统中&#xff0c;目的是定义多个节点间的同步规范。 在这里&#xff0c;我们将其引入数据库和缓存组…...

启动Nuxt-hub-starter: Failed to initialize wrangler bindings proxy write EOF

重新安装 node.js 这样做可以确保下载到了适合的 Windows 框架、Chocolatey&#xff08;一款Windows包管理工具&#xff09;、Python 等资源。 这个错误与Node版本、pnpm/yarn 的版本无关&#xff01; Node.js — Download Node.js (nodejs.org)...

技术驱动旅游创新!深度解析景区导览小程序的地图渲染与AR导航技术

随着现代生活节奏的加快&#xff0c;人们在外出旅游时更倾向于轻便出行&#xff0c;携带导览地图已成为过去。然而&#xff0c;面对景区广阔的面积和众多景点&#xff0c;游客常常感到迷茫&#xff0c;难以快速定位到自己所需的地点。景区导览小程序让游客只需搜索景区名称&…...

二叉树之遍历

二叉树之遍历 二叉树遍历遍历分类前序遍历流程描述代码实现 中序遍历流程描述代码实现 后序遍历流程描述代码实现 层次遍历流程描述代码实现 总结 二叉树遍历 遍历分类 遍历二叉树的思路有 4 种&#xff0c;分别是&#xff1a; 前序遍历二叉树&#xff0c;有递归和非递归两种…...

【经验贴】如何做好自己的职业规划(技术转项目经理)

我有几个问题想问大家 第一&#xff0c;你了解自己吗&#xff1f;你知道自己想要是什么吗&#xff1f;你了解自己的优势劣势吗&#xff1f; 第二&#xff0c;你了解这个行业吗&#xff1f;你知道这个行业是如何发展起来的吗&#xff1f;你了解这个行业的背景吗&#xff1f;你…...

【笔记】字符串相似度代码分享

目录 一、算法介绍1、算法1&#xff09;基于编辑距离2&#xff09;基于标记3&#xff09;基于序列4&#xff09;基于压缩5&#xff09;基于发音6&#xff09;简单算法 2、安装 二、代码demo1、Hamming 距离2、Levenshtein 距离3、Damerau-Levenshtein距离4、Jaro 相似度5、Jaro…...

AI墓地:738个倒闭AI项目的启示

近年来&#xff0c;人工智能技术迅猛发展&#xff0c;然而&#xff0c;不少AI项目却在市场上悄然消失。根据AI工具聚合网站“DANG”的统计&#xff0c;截至2024年6月&#xff0c;共有738个AI项目停运或停止维护。本文将探讨这些AI项目失败的原因&#xff0c;并分析当前AI初创企…...

工程文件参考——CubeMX+LL库+SPI主机 阻塞式通用库

文章目录 前言CubeMX配置SPI驱动实现spi_driver.hspi_driver.c 额外的接口补充 前言 SPI&#xff0c;想了很久没想明白其DMA或者IT比较好用的方法&#xff0c;可能之后也会写一个 我个人使用场景大数据流不多&#xff0c;如果是大批量数据交互自然是DMA更好用&#xff0c;但考…...

LLM - 模型历史

...