FindDiff_Qt找不同项目

文章目录

  • 项目简介
  • 源代码
    • widget.h
    • widget.cpp
    • widget.ui
    • 配置文件
      • 找不同.json

项目简介

  • 开发平台

    • win10
    • Qt6.6
    • msvc2022
  • 简介

    微信上有一些好玩的游戏, 找不同一种比较轻松有趣的游戏,也曾经在街机上被坑过N币, 玩了几次后,发现还是太难了,于是开始截屏放大,慢慢找,再然后就发展到截图发送到QQ的我的电脑里,用程序查找标记

    看效果:

    • 截屏的图

在这里插入图片描述

在这里插入图片描述

  • FindDiff_Qt Qt 版本的找不同
    • 交互性强点
    • 用 ps 2019 切片比较方便
    • 默认 qq的 “我的电脑”的目录并自动监视该目录,当有新的文件出现时,会自动加载并查找不同处,而且每次对比前会自动删除该目录下的其他jpg图片,需要注意

源代码

widget.h

#pragma once#include <QImage>
#include <QWidget>
#include <QFileSystemWatcher>
#include "ui_widget.h"namespace Ui {
class Widget;
}class MWidget : public QWidget
{Q_OBJECTpublic:explicit MWidget(QWidget *parent = nullptr);~MWidget();private slots:void on_pushButton_start_clicked();bool loadImage();void showImages();void findDifferent();void setFrameColor(QColor color);void on_pushButton_color_clicked();void on_spinBox_valueChanged(int arg1);void on_horizontalSlider_valueChanged(int value);void on_spinBox_x1_valueChanged(int arg1);void on_spinBox_y1_valueChanged(int arg1);void on_spinBox_x2_valueChanged(int arg1);void on_spinBox_y2_valueChanged(int arg1);void on_spinBox_w_valueChanged(int arg1);void on_spinBox_h_valueChanged(int arg1);void on_comboBox_currentIndexChanged(int index);public:Ui::Widget *ui;private:QImage srcImg , src, dst, result;int   label_src1_height;int   label_src2_height;int label_result_height;QColor frameColor = QColor("#55ffff");QFileSystemWatcher fwatcher;QString workPath;// QWidget interface
protected:void resizeEvent(QResizeEvent *event);
};

widget.cpp

#include "widget.h"
#include "qout.h"
#include "ui_widget.h"#include <QColorDialog>
#include <QDir>
#include <QDir>
#include <QFile>
#include <QFileSystemWatcher>
#include <QPainter>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>MWidget::MWidget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);ui->label_src1->setAlignment(Qt::AlignCenter);ui->label_src2->setAlignment(Qt::AlignCenter);ui->label_result->setAlignment(Qt::AlignCenter);ui->pushButton_start->setFocusPolicy(Qt::StrongFocus);ui->pushButton_start->setFocus(Qt::TabFocusReason);ui->pushButton_start->setAutoFillBackground(true);ui->pushButton_start->setAutoDefault(true);//    qout << focusNextChild() << focusWidget();//    qout << focusNextChild() << focusWidget();//    qout << focusNextChild() << focusWidget();ui->frame->setAutoFillBackground(true);ui->frame->setMaximumWidth(200);setFrameColor(frameColor);//    workPath = "E:/Users/Administrator/Documents/Tencent Files/273135482/FileRecv/MobileFile";workPath = QDir::fromNativeSeparators(ui->lineEdit->text());fwatcher.addPath(workPath);connect(&fwatcher, &QFileSystemWatcher::fileChanged,this,[](const QString &path){qout << path << "fileChanged";});connect(&fwatcher, &QFileSystemWatcher::directoryChanged,this,[this](const QString &path){qout << path << "directoryChanged";on_pushButton_start_clicked();});QFile file("D:/Project/qtdemos/32_opencv/FindDiff_Qt/找不同.json");  // 数据文件路径if(file.open(QFile::ReadOnly)) {auto byte = file.readAll();QJsonParseError JsonParseError ;QJsonDocument doc = QJsonDocument::fromJson(byte, &JsonParseError);if(JsonParseError.error)qout << JsonParseError.errorString();QSignalBlocker b(ui->comboBox);ui->comboBox->clear();QJsonArray docJsonArray = doc.array();for (int i = 0; i < docJsonArray.size(); ++i) {QJsonObject obj = docJsonArray.at(i).toObject();QString title = obj["title"].toString();int x1 = obj["x1"].toInt();int y1 = obj["y1"].toInt();int x2 = obj["x2"].toInt();int y2 = obj["y2"].toInt();int w  = obj["w"].toInt();int h  = obj["h"].toInt();QString itemTxt("%1:\tP1(%2,%3)\tP2(%4,%5)\t%6 x %7");itemTxt = itemTxt.arg(title).arg(x1).arg(y1).arg(x2).arg(y2).arg(w).arg(h);ui->comboBox->addItem(itemTxt);QVariantList list;list << x1 << y1 << x2 << y2 << w << h;ui->comboBox->setItemData(i,list);}}on_comboBox_currentIndexChanged(0);
}MWidget::~MWidget()
{delete ui;
}void MWidget::on_pushButton_start_clicked()
{auto ok = loadImage();if( ok )findDifferent();showImages();
}bool MWidget::loadImage()
{workPath = QDir::fromNativeSeparators(ui->lineEdit->text());qout << workPath;QDir dir(workPath);if(!dir.exists())return false;QStringList nameFilters;nameFilters << "*.jpg";QStringList fileNames = dir.entryList(nameFilters,QDir::Files,QDir::Name);qout << fileNames;if(fileNames.isEmpty())return false;QSignalBlocker block(fwatcher);for (int i = 0; i < fileNames.size()-1; ++i) {dir.remove(fileNames.at(i));}QString imageFile( dir.absoluteFilePath(fileNames.last()) );srcImg.load(imageFile);src = srcImg.copy(ui->spinBox_x1->value(),ui->spinBox_y1->value(),ui->spinBox_w ->value(),ui->spinBox_h ->value());dst = srcImg.copy(ui->spinBox_x2->value(),ui->spinBox_y2->value(),ui->spinBox_w ->value(),ui->spinBox_h ->value());//    找不同//    src = srcImg.copy(16,294,1096,729);//    dst = srcImg.copy(16,1055,1096,729);//    小花找不同//    src = srcImg.copy(119,452,465,1057);//    dst = srcImg.copy(588,452,465,1057);result = dst;return true;
}void MWidget::showImages()
{qout << "showImages";if(src.isNull())return ;ui->label_src1  ->setPixmap(QPixmap::fromImage(src)     .scaledToHeight(ui->label_src1  ->height()-ui->label_src1->frameWidth() * 2));ui->label_src2  ->setPixmap(QPixmap::fromImage(dst)     .scaledToHeight(ui->label_src2  ->height()-ui->label_src1->frameWidth() * 2));ui->label_result->setPixmap(QPixmap::fromImage(result)  .scaledToHeight(ui->label_result->height()-ui->label_src1->frameWidth() * 2));
}void MWidget::findDifferent()
{qout << "findDifferent";if(src.isNull())return ;QPainter painter;result = src;result = result.convertToFormat(QImage::Format_Grayscale8);result = result.convertToFormat(QImage::Format_RGB32);painter.begin(&result);painter.setPen(frameColor);for (int i = 0; i < src.width(); ++i) {for (int j = 0; j < src.height(); ++j) {QRgb srcPix = src.pixel(i,j);QRgb dstPix = dst.pixel(i,j);if ( ( qAbs( (qRed  (srcPix)  -qRed(dstPix) ) )  > ui->spinBox->value()  // 红色||qAbs( (qGreen(srcPix)-qGreen(dstPix) ) )  > ui->spinBox->value()  // 绿色||qAbs( (qBlue (srcPix)-qBlue (dstPix) ) )  > ui->spinBox->value() ) // 蓝色){painter.drawPoint(i,j);}}}painter.end();
}void MWidget::setFrameColor(QColor color)
{auto frame = ui->frame;QPalette p = frame->palette();p.setBrush( QPalette::Window, color);frame->setPalette(p);}void MWidget::resizeEvent(QResizeEvent */*event*/)
{if(src.isNull())return;showImages();
}void MWidget::on_pushButton_color_clicked()
{auto color = QColorDialog::getColor(QColor(85,255,255));frameColor = color;setFrameColor(color);if(src.isNull()) return;findDifferent();ui->label_result->setPixmap(QPixmap::fromImage(result)  .scaledToHeight(ui->label_result->height()-ui->label_src1->frameWidth() * 2));
}void MWidget::on_spinBox_valueChanged(int arg1)
{ui->horizontalSlider->setValue(arg1);
}void MWidget::on_horizontalSlider_valueChanged(int value)
{ui->spinBox->setValue(value);findDifferent();ui->label_result->setPixmap(QPixmap::fromImage(result)  .scaledToHeight(ui->label_result->height()-ui->label_src1->frameWidth() * 2));
}void MWidget::on_spinBox_x1_valueChanged(int arg1)
{on_pushButton_start_clicked();}
void MWidget::on_spinBox_x2_valueChanged(int arg1)
{on_pushButton_start_clicked();
}
void MWidget::on_spinBox_y1_valueChanged(int arg1)
{on_pushButton_start_clicked();
}
void MWidget::on_spinBox_y2_valueChanged(int arg1)
{on_pushButton_start_clicked();
}
void MWidget::on_spinBox_w_valueChanged(int arg1)
{on_pushButton_start_clicked();
}
void MWidget::on_spinBox_h_valueChanged(int arg1)
{on_pushButton_start_clicked();
}void MWidget::on_comboBox_currentIndexChanged(int index)
{auto vars = ui->comboBox->itemData(index).value<QVariantList>();qout << "=======" << index << vars;QSignalBlocker x1( ui->spinBox_x1 );QSignalBlocker y1( ui->spinBox_y1 );QSignalBlocker x2( ui->spinBox_x2 );QSignalBlocker y2( ui->spinBox_y2 );QSignalBlocker w ( ui->spinBox_w  );QSignalBlocker h ( ui->spinBox_h  );ui->spinBox_x1->setValue(vars.at(0).toInt());ui->spinBox_y1->setValue(vars.at(1).toInt());ui->spinBox_x2->setValue(vars.at(2).toInt());ui->spinBox_y2->setValue(vars.at(3).toInt());ui->spinBox_w ->setValue(vars.at(4).toInt());ui->spinBox_h ->setValue(vars.at(5).toInt());
}

widget.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>Widget</class><widget class="QWidget" name="Widget"><property name="geometry"><rect><x>0</x><y>0</y><width>873</width><height>672</height></rect></property><property name="minimumSize"><size><width>0</width><height>300</height></size></property><property name="windowTitle"><string>Form</string></property><layout class="QGridLayout" name="gridLayout_3"><item row="0" column="0"><widget class="QLabel" name="label_src1"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="minimumSize"><size><width>400</width><height>300</height></size></property><property name="frameShape"><enum>QFrame::Box</enum></property><property name="text"><string/></property><property name="buddy"><cstring>bottomright</cstring></property></widget></item><item row="0" column="1"><widget class="QLabel" name="label_result"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="minimumSize"><size><width>400</width><height>300</height></size></property><property name="frameShape"><enum>QFrame::Box</enum></property><property name="text"><string/></property></widget></item><item row="1" column="0"><widget class="QLabel" name="label_src2"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="minimumSize"><size><width>400</width><height>300</height></size></property><property name="frameShape"><enum>QFrame::Box</enum></property><property name="text"><string/></property></widget></item><item row="1" column="1"><widget class="QFrame" name="bottomright"><property name="minimumSize"><size><width>400</width><height>300</height></size></property><property name="frameShape"><enum>QFrame::Box</enum></property><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QWidget" name="widget_2" native="true"><layout class="QGridLayout" name="gridLayout_2"><item row="0" column="0" colspan="4"><widget class="QComboBox" name="comboBox"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><item><property name="text"><string>找不同             p1(16,293)   p2(16,1055)  1096 x 729</string></property></item><item><property name="text"><string>小花找不同      p1(119,452) p2(588,452)   465 x 1057</string></property></item></widget></item><item row="1" column="0"><widget class="QLabel" name="label"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>x1</string></property></widget></item><item row="1" column="1"><widget class="QSpinBox" name="spinBox_x1"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>119</number></property></widget></item><item row="1" column="2"><widget class="QLabel" name="label_7"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>x2</string></property></widget></item><item row="1" column="3"><widget class="QSpinBox" name="spinBox_x2"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>588</number></property></widget></item><item row="2" column="0"><widget class="QLabel" name="label_2"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>y1</string></property></widget></item><item row="2" column="1"><widget class="QSpinBox" name="spinBox_y1"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>452</number></property></widget></item><item row="2" column="2"><widget class="QLabel" name="label_5"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>y2</string></property></widget></item><item row="2" column="3"><widget class="QSpinBox" name="spinBox_y2"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>452</number></property></widget></item><item row="3" column="0"><widget class="QLabel" name="label_3"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>w</string></property></widget></item><item row="4" column="0"><widget class="QLabel" name="label_4"><property name="sizePolicy"><sizepolicy hsizetype="Minimum" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>h</string></property></widget></item><item row="3" column="1" colspan="3"><widget class="QSpinBox" name="spinBox_w"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>465</number></property></widget></item><item row="4" column="1" colspan="3"><widget class="QSpinBox" name="spinBox_h"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximum"><number>2000</number></property><property name="value"><number>1057</number></property></widget></item></layout></widget></item><item><widget class="QFrame" name="frame1"><property name="frameShape"><enum>QFrame::Box</enum></property><layout class="QVBoxLayout" name="verticalLayout_2"><item><widget class="QLineEdit" name="lineEdit"><property name="text"><string>D:\Users\Administrator\Documents\Tencent Files\xxx保密需要xxx\FileRecv\MobileFile</string></property></widget></item><item><layout class="QHBoxLayout" name="horizontalLayout"><item><widget class="QLabel" name="label_6"><property name="text"><string>色差</string></property><property name="alignment"><set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set></property></widget></item><item><widget class="QSlider" name="horizontalSlider"><property name="value"><number>20</number></property><property name="orientation"><enum>Qt::Horizontal</enum></property></widget></item><item><widget class="QSpinBox" name="spinBox"><property name="maximum"><number>255</number></property><property name="value"><number>40</number></property></widget></item></layout></item><item><layout class="QHBoxLayout" name="horizontalLayout_3"><item><spacer name="horizontalSpacer_2"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>153</width><height>20</height></size></property></spacer></item><item><widget class="QFrame" name="frame"><property name="minimumSize"><size><width>100</width><height>0</height></size></property></widget></item><item><widget class="QPushButton" name="pushButton_color"><property name="text"><string>颜色</string></property></widget></item></layout></item><item><layout class="QHBoxLayout" name="horizontalLayout_4"><item><spacer name="horizontalSpacer"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>278</width><height>20</height></size></property></spacer></item><item><widget class="QPushButton" name="pushButton_start"><property name="text"><string>开始</string></property></widget></item></layout></item></layout></widget></item></layout></widget></item></layout></widget><tabstops><tabstop>lineEdit</tabstop><tabstop>horizontalSlider</tabstop><tabstop>spinBox</tabstop><tabstop>pushButton_color</tabstop><tabstop>pushButton_start</tabstop></tabstops><resources/><connections/>
</ui>

配置文件

找不同.json

[{"title":"找不同","x1":16,"y1":294,"x2":16,"y2":1055,"w":1096,"h":729},{"title":"小花找不同-横向","x1":53,"y1":441,"x2":53,"y2":1107,"w":1020,"h":636},{"title":"小花找不同-竖向","x1":119,"y1":452,"x2":588,"y2":452,"w":465,"h":1057}
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群晖上搭建teamspeak3语音服务器

什么是 TeamSpeak &#xff1f; TeamSpeak &#xff08;简称 TS&#xff09;是一款团队语音通讯工具&#xff0c;但比一般的通讯工具具有更多的功能而且使用方便。它由服务器端程序和客户端程序两部分组成&#xff0c;如果不是想自己架设 TS 服务器&#xff0c;只需下载客户端程…

Linux系统编程_网络编程:字节序、socket、serverclient、ftp 云盘

1. 网络编程概述&#xff08;444.1&#xff09; TCP/UDP对比 TCP 面向连接&#xff08;如打电话要先拨号建立连接&#xff09;&#xff1b;UDP 是无连接的&#xff0c;即发送数据之前不需要建立连接TCP 提供可靠的服务。也就是说&#xff0c;通过 TCP 连接传送的数据&#xf…

设计模式——单例模式详解

目录 设计模式类型单例模式单例模式方式饿汉式静态常量方式静态代码块形式 懒汉式线程不安全&#xff08;不推荐&#xff09;懒汉式优化&#xff08;不推荐&#xff09; 双重检查&#xff08;推荐方式&#xff09;静态内部类&#xff08;推荐方式&#xff09;枚举方式&#xff…

STM32 ADC数模转换器

STM32 ADC数模转换器 ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 STM32主要是数字电路&#xff0c;数字电路只有高低电平&#xf…

【torch高级】一种新型的概率学语言pyro(01/2)

一、说明 贝叶斯推理&#xff0c;也就是变分概率模型估计&#xff0c;属于高级概率学模型&#xff0c;极有学习价值&#xff1b;一般来说&#xff0c;配合实际活动学习可能更直观&#xff0c;而pyro是pytorch的概率工具&#xff0c;不同于以往的概率工具&#xff0c;只是集中于…

PY32F002A系列单片机:高性价比、低功耗,满足多样化应用需求

PY32F002A系列微控制器是一款高性能、低功耗的MCU&#xff0c;它采用32位ARM Cortex-M0内核&#xff0c;最高工作频率达到24MHz&#xff0c;提供了强大的计算能力。此外&#xff0c;PY32F002A拥有最大20Kbytes的flash存储器和3Kbytes的SRAM&#xff0c;为简单的数据处理提供了充…

Python Selenium 之数据驱动测试的实现!

数据驱动模式的测试好处相比普通模式的测试就显而易见了吧&#xff01;使用数据驱动的模式&#xff0c;可以根据业务分解测试数据&#xff0c;只需定义变量&#xff0c;使用外部或者自定义的数据使其参数化&#xff0c;从而避免了使用之前测试脚本中固定的数据。可以将测试脚本…

Unity3D 如何用unity引擎然后用c#语言搭建自己的服务器

Unity3D是一款强大的游戏开发引擎&#xff0c;可以用于创建各种类型的游戏。在游戏开发过程中&#xff0c;经常需要与服务器进行通信来实现一些功能&#xff0c;比如保存和加载游戏数据、实现多人游戏等。本文将介绍如何使用Unity引擎和C#语言搭建自己的服务器&#xff0c;并给…

Redis(05)| 数据结构-哈希表

哈希表是一种保存键值对&#xff08;key-value&#xff09;的数据结构。 哈希表中的每一个 key 都是独一无二的&#xff0c;程序可以根据 key 查找到与之关联的 value&#xff0c;或者通过 key 来更新 value&#xff0c;又或者根据 key 来删除整个 key-value等等。 在讲压缩列表…

报错:Could not resolve host: mirrorlist.centos.org;Unknown error

报错&#xff1a;Could not resolve host: mirrorlist.centos.org;Unknown error 一般是因为网络配置错误导致无法连接外网&#xff0c;我们先尝试ping一下www.baidu.com发现无法ping通。 果然&#xff0c;接下来我们就开始排查吧&#xff01;&#xff01; 1.网络配置查看 打开…

HarmonyOS原生分析能力,即开即用助力精细化运营

数据分析产品对开发者的价值呈现在两个层面&#xff0c;第一个是产品的层面&#xff0c;可以通过数据去洞察用户的行为&#xff0c;从而找到产品的优化点。另外一个就是运营层面&#xff0c;可以基于数据去驱动&#xff0c;来实现私域和公域的精细化运营。 在鸿蒙生态上&#…

conda 实践

1. 环境部署 1.1. 下载 anaconda 安装包 下面这个网址查找自己需要的版本 https://repo.anaconda.com/archive/ 或者手动下载。 wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh 1.2. 执行安装程序 #安装依赖&#xff1a; sudo yum install bzip2…

APP自动化测试 ---- Appium介绍及运行原理

在面试APP自动化时&#xff0c;有的面试官可能会问Appium的运行原理&#xff0c;以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架&#xff0c;可用于原生&#xff0c;混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS&#xf…

node 第十三天 express初见

express概念 Fast, unopinionated, minimalist web framework for Node.js 快速、独立、极简的 Node.js Web 框架。 express相当于前端的jquery, 在不更改不侵入原生node的基础上封装了大量易用且实用的服务端api, express框架的封装原理就是前面第十天我们自己封装的简易服务器…

安卓核心板_天玑700、天玑720、天玑900_5G模块规格参数

5G安卓核心板是采用新一代蜂窝移动通信技术的重要设备。它支持万物互联、生活云端化和智能交互的特性。5G技术使得各类智能硬件始终处于联网状态&#xff0c;而物联网则成为5G发展的主要动力。物联网通过传感器、无线网络和射频识别等技术&#xff0c;实现了物体之间的互联。而…

微信小程序如何利用接口返回经纬计算实际位置并且进行导航功能【下】

如果要在微信小程序内部导航的话可以使用wx.navigateToMiniProgram方法来打开腾讯地图小程序&#xff0c;并传递目的地的经纬度信息。 目录 1.如何获取高精地址 2.如何调起地图 3.实现效果 navigateToDestination: function() {let that this;var latitude parseFloa…

springboot+vue基于协同过滤算法的私人诊所管理系统的设计与实现【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

Kafka - 异步/同步发送API

文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求&#xff1a;创建Kafka生产者&#xff0c;采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…

数据结构与算法之矩阵: Leetcode 48. 旋转矩阵 (Typescript版)

旋转图像 https://leetcode.cn/problems/rotate-image/ 描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1 输入&…

【Unity数据交互】JsonUtility的“爱恨情仇“

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…