Vue2-基础使用模板
data和el的第一种写法
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>VUE</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
<body><div id="root">你好:{{name}},{{address}}</div><script type="text/javascript">new Vue({el:"#root",data(){return {name: "马朋帅",address:"唐县"}}})</script>
</body>
</html>
data和el的第二种写法
// 第一种
new Vue({el:"#root"
})
// el第二种和data的第二种(data必须用第二种)
let v = new Vue({data(){return {name: "马朋帅"}}
})
v.$mount('root')
methods
<script>
new Vue({methods:{open1(){console.log("v-on");},open2(){console.log("@");}}
})
</script>
computed
注意:计算方法里面用到的任何一个date里面的数据发生变化,方法都会重新计算一遍
<div>{{aaa}}</div>
<script>
new Vue({data(){return {name: "马朋帅",age:"23"}}computed:{// 简写aaa(){return this.name+this.age; //name和age任何一个改变aaa()都会重新执行一遍}}
})
</script>
正确写法,不加括号:{{aaa}},错误写法:{{aaa()}}
<div>{{aaa}}</div>
<script>
new Vue({data(){return {name: "马朋帅",age:"23"}}computed:{// 完整写法aaa:{get(){return this.name+age;},set(value){this.name = value;}}}
})
</script>
{{aaa}} 解析时会调用 get()方法
this.aaa = “mps” ,设置他的值时会调用set(value)方法,参数 value就是 “mps”
watch
简写
<body>
<div id="root"><button @click="num++">按钮</button>
</div>
<script type="text/javascript">new Vue({el: "#root",data() {return {num: 1}},watch: {num(newValue,oldValue) {console.log(newValue,oldValue)}}})
</script>
</body>
另一种写法
<body>
<div id="root"><button @click="num++">按钮</button>
</div>
<script type="text/javascript">const vm = new Vue({el: "#root",data() {return {num: 1}}})vm.$watch('num',function (newValue,oldValue){console.log(newValue,oldValue)})
</script>
</body>
监视data里面的值
<body><div id="root"><button @click="num++">按钮</button></div><script type="text/javascript">new Vue({el:"#root",data(){return {num:1}},watch:{num:{ // 监视num变量handler(newValue,oldValue){console.log(newValue,oldValue)}}}})</script>
</body>
监视computed
(里面的函数)
<body><div id="root"><button @click="num++">按钮</button></div><script type="text/javascript">new Vue({el:"#root",data(){return {num:1}},computed:{aaa(){return this.num;}},watch:{aaa:{handler(newValue,oldValue){console.log(newValue,oldValue)}}}})</script>
</body>
初始化时执行一次
<body><div id="root"><button @click="num++">按钮</button></div><script type="text/javascript">const vm = new Vue({el:"#root",data(){return {num:1}},watch:{num:{ immediate:true, // 初始化时就调用一次handler函数handler(newValue,oldValue){console.log(newValue,oldValue)}}}})// 另一种写法vm.$watch('num',{immediate:true,handler(newValue,oldValue){console.log(newValue,oldValue)}})</script>
</body>
深度监视普通写法
(‘obj.a’)a属性改变时触发handler()
<body><div id="root"><button @click="obj.a++">a++</button></div><script type="text/javascript">const vm = new Vue({el:"#root",data(){return {obj:{a:1}}},watch:{'obj.a':{handler(){console.log("a改变了")}}}})</script>
</body>
深度监视正确写法
(deep:true)a,b改变都触发handler()
<body><div id="root"><button @click="obj.a++">a++</button><button @click="obj.b++">b++</button></div><script type="text/javascript">const vm = new Vue({el:"#root",data(){return {obj:{a:1,b:1}}},watch:{obj:{deep:true,handler(){console.log("obj改变了")}}}})</script>
</body>
过滤器filters
可以用在v-bind和 {{ }} 里面,用 | 分割
例:{{ message | filterA | filterB }} message为 filterA 的第一个参数,filterA 的结果为 filterB 的第一个参数
局部过滤器
<div id="root"><div v-bind:name="name | capitalize"></div><ul><li v-for="num of list ">{{num}}--{{num | capitalize1}}--{{num | capitalize2("a")}}--{{num | capitalize1 | capitalize2("a")}}</li></ul></div>
<script type="text/javascript">const vm = new Vue({el: "#root",data() {return {name : "张三",list:[0,1,2,3,4,5,6]}},filters: {capitalize(value){return value + '啊'},capitalize1(value){return value+10},capitalize2(value,str){return value+str}}})
</script>
全局过滤器
<script type="text/javascript">Vue.filter('capitalize', function (value) {return value+"全局过滤器"})new Vue({el: "#root",data() {return {}}})
</script>
脚手架后目录结构
.文件目录
├── node_modules
├── public
│ ├── favicon.ico: 页签图标
│ └── index.html: 主页面
├── src
│ ├── assets: 存放静态资源
│ │ └── logo.png: 自己引入的图片
│ │── component: 存放组件
│ │ ├── Student.vue: 自定义组件
│ │ └── School.vue: 自定义组件
│ │── App.vue: 汇总所有组件
│ └── main.js: 入口文件
├── .gitignore: git版本管制忽略的配置
├── babel.config.js: babel的配置文件
├── package.json: 应用包配置文件
├── README.md: 应用描述文件
├── .eslintrc.js: 可以解决组件名语法错误问题(自己创建该文件)
├── vue.config.js: 自定义配置文件(上这儿配置东西)
└── package-lock.json: 包版本控制文件
几个主要文件
.eslintrc.js 文件(直接用)
module.exports = {root: true,env: {node: true},'extends': ['plugin:vue/essential','eslint:recommended'],parserOptions: {parser: '@babel/eslint-parser'},rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',//在rules中添加自定义规则//关闭组件命名规则"vue/multi-word-component-names":"off",},overrides: [{files: ['**/__tests__/*.{j,t}s?(x)','**/tests/unit/**/*.spec.{j,t}s?(x)'],env: {jest: true}}]
}
School.vue 组件
<template><div class="demo"><h2>学校名称:{{ name }}</h2><h2>学校地址:{{ address }}</h2><button @click="showName">点我提示学校名</button></div>
</template><script>
export default {name: 'School',data() {return {name: "马朋帅",address: "成都",};},methods: {showName() {alert(this.name);}},
};
</script><style>
.demo {background-color: orange;}
</style>
App.vue
<template>
<!-- template里面必须先包一个div --><div><School></School><Student></Student></div>
</template><script>
// 引入组件
import School from './components/School.vue'
import Student from './components/Student.vue'export default {name:'App',components:{ School, Student }
}
</script>
main.js
import Vue from 'vue'
import App from './App.vue'// 阻止启动时的生成提示
Vue.config.productionTip = falsenew Vue({render: h => h(App), // 作用:把App组件引入到index.html中id为#app的div里面
}).$mount('#app')
vue.config.js (可以继续添加新的配置)
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true, //不用管默认就有lintOnSave: false // 关闭语法校验(自己配置)
})
相关文章:
Vue2-基础使用模板
data和el的第一种写法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>VUE</title><script type"text/javascript" src"../js/vue.js"></script> </head&g…...
Vue2-指令语法
v-bind和v-model <a v-bind:href"url">笔记1</a> <a :href"url">笔记2</a><input type"text" v-model:value"name"/> <input type"text" v-model"name"/>data(){return {ur…...
Cesium学习笔记——坐标系统及坐标转换
前言 在Cesium的学习中,学会读文档十分重要!!!在这里附上Cesium中英文文档1.117。 在Cesium中,一共有四种比较重要的坐标系,分别是地理坐标系,地心地固坐标系,东-北-上局部坐标系和屏…...
【AI微信小程序开发】大转盘小程序项目代码:自设转盘选项和概率(含完整前端+后端代码)
系列文章目录 【AI微信小程序开发】AI减脂菜谱小程序项目代码:根据用户身高/体重等信息定制菜谱(含完整前端+后端代码)【AI微信小程序开发】AI菜谱推荐小程序项目代码:根据剩余食材智能生成菜谱(含完整前端+后端代码)【AI微信小程序开发】图片工具小程序项目代码:图片压…...
C语言文件操作完全手册:读写·定位·实战
1.什么是文件 1.1文件的概念 文件(File)是计算机中用于持久化存储数据的基本单位。它可以存储文本、图片、音频、程序代码等各种信息,并在程序运行结束后仍然保留数据。 1.2文件名 一个文件要有一个唯一的文件标识,以便用户识别…...
网络协议之详解(Detailed Explanation of Network Protocol)
NFS、FTP、SMB、WebDav、DLNA协议 大家好!今天来和大家聊聊让很多人都感到困惑的 NFS、FTP、SMB、WebDav、DLNA 这几种协议。相信不少人在面对它们的时候,常常是一头雾水,傻傻分不清。别担心,看完这篇文章,你就会对它…...
VICP(Velocity-based ICP):通过运动校准实现精准姿态估计
在三维点云配准的领域,经典的ICP(Iterative Closest Point)算法已经成为广泛使用的方法,尤其是在处理静态环境中的点云配准时,效果非常好。然而,随着动态场景的出现,物体运动和传感器的变动引发…...
典籍知识问答典籍查询界面前端界面设计效果实现
根据组内负责前端界面设计的同学的界面设计,进行典籍查询前端界面的实现 1.实现效果 2.前端代码 ClassicView.vue <template> <div class"classics"> <img className"back" alt"Back" src"https://c.animaapp…...
Megatron - LM 重要文件解析 - /tools/preprocess_data.py
preprocess_data.py 的主要功能。这是 Megatron-LM 的数据预处理脚本,主要用于将原始文本数据转换为模型训练所需的格式。 核心功能: 1. 数据预处理流程: 输入:原始文本文件(JSON格式) 处理:…...
探索RTOS在电力控制系统中的应用价值
电力控制系统对实时性、可靠性和高效性有着严苛要求,实时操作系统(RTOS)凭借其独特性能优势,在其中扮演关键角色。本文深入剖析RTOS在电力控制系统中的重要作用,探讨其应用前景,助力推动电力行业智能化、现…...
第5章-1 优化服务器设置
上一篇:《第4章-5 linux 网络管理》,接着服务器设置 本章我们将解释如何为MySQL服务器创建合适的配置文件。这是一个迂回的旅程,有许多兴趣点和可以俯瞰风景的短途旅程。这些短途旅程是必要的。确定合适配置的最短路径并不是从研究配置选项并…...
进阶篇 第 4 篇:驾驭季节性波动 - SARIMA 模型实战
进阶篇 第 4 篇:驾驭季节性波动 - SARIMA 模型实战 (图片来源: Pixabay on Pexels) 在上一篇中,我们深入探索了经典的 ARIMA(p,d,q) 模型。它通过整合自回归 (AR)、差分 (I) 和移动平均 (MA) 提供了一个强大的框架来对(处理后)平…...
Android调用springboot接口上传大字段,偶现接口超时的优化
介绍 最近有个功能,Android通过okhttp上传实体类,实体类包含一个大字段,上传的字符串长度达到300k,偶现接口超时的情况,大概100次有5次,看日志发现数据并没有到达接口,可能在网络传输中就超时了…...
[特殊字符]【Qt自定义控件】创意开关按钮 - 丝滑动画+自定义样式+信号交互 | 附完整源码
话不多说直接上代码 1、.mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H#include <QWidget> #include <QPropertyAnimation>class MyButton : public QWidget {Q_OBJECT public:explicit MyButton(QWidget *parent nullptr);protected:void paintEvent(QPain…...
大数据开发的基本流程
大数据开发通常围绕数据的“采集 → 存储 → 处理 → 分析 → 展示”几个阶段来展开。下面是一个典型的大数据开发基本流程(适用于离线或实时场景): 一、数据采集(Data Ingestion) 目标:从各种来源采集原始…...
关于创建UNIX/Linux daemon进程的笔记
Linux daemon程序简单说就是Linux后台服务进程。 传统的、标准的创建方法:2次fork setsid 详细步骤 进程1(父进程)调用fork,创建子进程2,进程1退出。 1)这个步骤是为第二部做铺垫。 2)此时&a…...
国产紫光同创FPGA实现SDI视频编解码,基于HSSTHP高速接口,提供3套工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目本博已有的 SDI 编解码方案本方案在Xilinx--Artix7系列FPGA上的应用本方案在Xilinx--Kintex系列FPGA上的应用本方案在Xilinx--Zynq系列FPGA上的应用本方案在Xilinx--U…...
Oracle--SQL性能优化与提升策略
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、导致性能问题的内在原因 系统性能问题的底层原因主要有三个方面: CPU占用率过高导致资源争用和等待内存使用率过高导致内存不足并需…...
drupal7可以从测试环境一键部署到生产环境吗
Drupal 7 本身并没有“内建的一键部署功能”,所以“从测试环境一键部署到生产环境”不能完全自动化完成,尤其是涉及数据库、配置和文件系统时。但你可以通过一些工具和方法实现接近“一键部署”的效果 ✅ 🚧 为什么不能直接一键部署ÿ…...
vue项目中axios统一或单独控制接口请求时间
先说统一 这里将请求时间统一控制在12秒 // 使用由库提供的配置的默认值来创建实例 // 此时超时配置的默认值是 0 const axiosInstance axios.create()// 覆写库的超时默认值 // 现在,在超时前,所有请求时间统一控制在10秒 axiosInstance.defaults.ti…...
chromedp 反反爬设计方案
二、基础防护层实现 1. 浏览器特征伪装 opts : append(chromedp.DefaultExecAllocatorOptions[:],// 禁用自动化特征chromedp.Flag("disable-blink-features", "AutomationControlled"),chromedp.Flag("useAutomationExtension", false),// 随…...
OpenLDAP 管理 ELK 用户
文章目录 一、新建 ELK 相关用户组二、配置 Elasticsearch2.1 修改 elasticsearch.yml 配置2.2 使用 API 接口建立角色和用户映射 三、Kibana 验证用户登录 一、新建 ELK 相关用户组 由于后续要将 LDAP 的用户与 ELK 的角色进行映射,所以需先创建几个以 ELK 的角色…...
深度解析MQTT源码架构与AIGC场景融合实战
一、结构体内存优化:支撑千万级设备连接 1.1 紧凑内存布局设计 classDiagramclass MQTTClient_message {char struct_id[4]int struct_versionvoid* payloadint payloadlenint qosint retainedint dupint msgidMQTTProperties properties}note for MQTTClient_mes…...
Node.js 操作 ElasticSearch 完整指南:从安装到实战
本文将手把手教你如何搭建 ElasticSearch 环境,并通过 Node.js 实现高效数据检索。包含 10 个可直接复用的代码片段,助你快速掌握搜索、聚合等核心功能! 环境搭建篇 1. ElasticSearch 安装要点 下载 es下载连接 下载下来后,进…...
Python+区块链:如何打造智能化资产管理系统?
Python+区块链:如何打造智能化资产管理系统? 在当今数字经济时代,区块链资产管理已成为金融科技、去中心化金融(DeFi)以及企业资金流转的关键应用。传统的资产管理往往依赖于中心化机构,存在数据透明度低、效率受限、管理成本高等问题,而区块链技术的出现,为资产管理提…...
Sentinel源码—8.限流算法和设计模式总结一
大纲 1.关于限流的概述 2.高并发下的四大限流算法原理及实现 3.Sentinel使用的设计模式总结 1.关于限流的概述 保护高并发系统的三把利器:缓存、降级和限流。限流就是通过限制请求的流量以达到保护系统的目的,比如秒杀抢购。具体就是对并发请求进行限…...
SpringMVC入门
1、SpringMVC概念 SpringMVC是在Spring框架的基础上引入MVC模式的思想,SpringMVC即是一种框架,也是一种思想,将前后端彻底分离,后端不再需要关注前端的代码。前后端分工明确 我们原先学习的MVC三层架构,MVC是web开发…...
MYSQL之库的操作
创建数据库 语法很简单, 主要是看看选项(与编码相关的): CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 1. 语句中大写的是…...
并发设计模式实战系列(3):工作队列
🌟 大家好,我是摘星! 🌟 今天为大家带来的是并发设计模式实战系列,第三章工作队列(Work Queue),废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 生产者-消费者架构 …...
已安装爱思助手和Apple相关驱动,但仍无法有线连接iPhone热点,且网络适配器没有Apple Mobile Device Ethernet,问题解决
已安装爱思助手和Apple相关驱动,但仍无法有线连接iPhone热点,且网络适配器没有Apple Mobile Device Ethernet 问题解决: 用爱思助手连接手机,点击工具箱 - iTunes及驱动 点击高级修复 在系统存储的旧驱动文件项右侧࿰…...
用 Go 优雅地清理 HTML 并抵御 XSS——Bluemonday
1、背景与动机 只要你的服务接收并回显用户生成内容(UGC)——论坛帖子、评论、富文本邮件正文、Markdown 等——就必须考虑 XSS(Cross‑Site Scripting)攻击风险。浏览器在解析 HTML 时会执行脚本;如果不做清理&#…...
MySQL基本查询与数据操作全面解析
目录 1. CRUD操作概述 2. Create操作详解 2.1 表的创建 2.2 单行数据插入 2.3 多行数据插入 2.4 插入冲突处理 3. Retrieve操作详解 3.1 基础查询 全列查询(慎用) 指定列查询 表达式查询 结果去重 3.2 条件查询(WHERE子句&#…...
《C++ 模板:泛型编程的核心》
C模板详解 模板是C中实现泛型编程的重要特性,它允许你编写与数据类型无关的代码。模板可以分为函数模板和类模板两种。 1. 函数模板 函数模板允许你定义一个可以处理多种数据类型的函数。 基本语法 template <typename T> T functionName(T parameter1, T…...
Web3实战:从零开发你的ERC20代币合约
区块链技术的普及让代币发行不再是金融巨头的专利。本文将以Solidity 0.8.20和OpenZeppelin 5.0为技术栈,手把手教你开发具备铸造、销毁、权限管理等进阶功能的ERC20代币,并部署到以太坊Sepolia测试网。以下是完整开发路线图: 一、ERC20代币的…...
简述大疆无人机对接
文章目录 概述MSDK对接MSDK简介MSDK集成步骤直播推流获取飞机实时数据 UX SDK上云API上云API简介上云API对接步骤Pilot上云Pilot怎么安装配置三方云平台地址直播获取飞机数据 Dock上云Dock上云简介直播方案设备管理 如何对接多个飞机引用 概述 一般而言,对接大疆的…...
docker-compose搭建kafka
1、单节点docker-compose.yml version: 3 services:zookeeper:image: zookeeper:3.8container_name: zookeeperports:- "2181:2181"volumes:- ./data/zookeeper:/dataenvironment:ZOO_MY_ID: 1ZOO_MAX_CLIENT_CNXNS: 100kafka:image: bitnami/kafka:3.7container_na…...
FramePack V2版 - 支持首尾帧生成,支持LoRA,支持批量,支持50系显卡,一个强大的AI视频生成软件 本地一键整合包下载
FramePack 是斯坦福大学主导开发的视频生成框架,是一种用于视频生成的下一帧(下一帧部分)预测神经网络结构,可以逐步生成视频。FramePack 主要开发者之一,就是业内大名鼎鼎的张吕敏大佬,AI领域的“赛博佛祖…...
开发网页程序时预览时遇到跨域问题解决方法
CocosCreator 开发h5游戏要用接口、开发html程序网页程序在chrome中预览时都会遇到跨域问题,怎么办? 网上有很多方法,主要是通过服务器端去配置,但那个相对来说消弱安全问题,这个不建议,因为是开发,个人行业,我们知道问题所以,简单点就主要是通过chrome的参数来禁用: 关闭 Ch…...
【音视频】FFmpeg内存模型
FFmpeg内存模型 从现有的Packet拷贝一个新Packet的时候,有两种情况: 两个Packet的buf引用的是同一数据缓存空间,这时候要注意数据缓存空间的释放问题;两个Packet的buf引用不同的数据缓存空间,每个Packet都有数据缓存…...
基于nlohmann/json 实现 从C++对象转换成JSON数据格式
C对象的JSON序列化与反序列化 基于JsonCpp库实现C对象序列化与反序列化 JSON 介绍 JSON作为一种轻量级的数据交换格式,在Web服务和应用程序中广泛使用。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读…...
在线视频转 AVI 的便捷之选,便捷操作,无需下载软件,在线使用
在视频处理的众多需求中,将视频转换为 AVI 格式是不少用户的刚需。小白工具网(https://www.xiaobaitool.net/videos/convert-to-avi/ )的在线视频转 AVI 功能,以其显著优势,多格式支持、便捷操作、数据安全保障以及广泛…...
【MCP Node.js SDK 全栈进阶指南】初级篇(3):MCP资源开发基础
引言 在前两篇文章中,我们已经详细介绍了MCP开发环境的搭建以及基础服务器开发。本文作为MCP TypeScript-SDK系列的第三篇,将聚焦于MCP资源开发基础,包括静态资源与动态资源的开发、资源模板设计与参数提取、资源列表与发现机制,以及常见资源类型与最佳实践。通过本文的学…...
L2-1、打造稳定可控的 AI 输出 —— Prompt 模板与格式控制
一、为什么需要 Prompt 模板? 在与 AI 模型交互时,我们经常会遇到输出不稳定、格式混乱的问题。Prompt 模板帮助我们解决这些问题,通过结构化的输入指令来获得可预测且一致的输出结果。 模板的作用主要体现在: 固定输出格式&am…...
Java集成Zxing和OpenCV实现二维码生成与识别工具类
Java集成Zxing和OpenCV实现二维码生成与识别工具类 本文将介绍如何使用Java集成Zxing和OpenCV库,实现二维码的生成和识别功能。识别方法支持多种输入形式,包括File对象、文件路径和Base64编码。 一、环境准备 添加Maven依赖 <dependencies><…...
jenkins pipeline ssh协议报错处理
一、jenkins版本 jenkins:2.492.3 openssh:OpenSSH_9.8p1, OpenSSL 3.3.1 # grep jenkins /etc/passwd jenkins:x:996:994:Jenkins Automation Server:/var/lib/jenkins:/bin/false 二、报错 三、处理 步骤1:手动添加目标主机密钥到Jenk…...
当OCR遇上“幻觉”:如何让AI更靠谱地“看懂”文字?
在数字化的世界里,OCR(光学字符识别)技术就像给机器装上了“电子眼”。但当这项技术遇上大语言模型,一个意想不到的问题出现了——AI竟然会像人类一样产生“幻觉”。想象一下,当你拿着模糊的财务报表扫描件时ÿ…...
vue watch监听路由,第一次进入不触发解决办法
“第一次进入的时候没触发,第二次就触发了”非常典型,它印证了路由监听(无论是 watch $route 还是 beforeRouteUpdate)主要是为了监听变化,而不是处理首次加载时的初始状态。 当你通过 this.$router.push 导航到一个新…...
JVM考古现场(二十四):逆熵者·时间晶体的永恒之战
"警告!时间晶体正在吞噬GC日志!" 我腰间的太极八卦镜突然迸发出刺目的量子辉光,终南山之巅的星宿大阵浮现出诡异的四维克莱因瓶拓扑——这是逆熵者文明穿越时空的拜帖! 楔子:时间晶体的觉醒 🕯️…...
spring中使用netty-socketio部署到服务器(SSL、nginx转发)
spring中使用netty-socketio部署到服务器(SSL、nginx转发) 本文实现前端socket.io-client连接后端netty-socketio,并且部署到服务器上的示例,以及说明一些实现过程中可能遇到的错误。 socketio默认基于的路径是/socket.io 传输…...
qt.tlsbackend.ossl: Failed to load libssl/libcrypto.
我的环境是windows,QT6.3.2(msvc2019_64/mingw_64) 出错原因 QT没有正确加载OpenSSL。 解决过程 1、确保安装的有openssl。 文章结尾有个注意,是其他方式安装过openssl,环境变量有,但是QT找不到的问题。…...