【Unity 实用插件篇】| 可视化图表插件XCharts (折线图、柱状图、饼图等)详细教学

news2024/11/24 13:44:45

请添加图片描述

      • 前言
  • 【Unity 实用插件篇】| 可视化图表插件XCharts (折线图、柱状图、饼图等)详细教学
    • 一、XCharts介绍
      • 1.1 特性
      • 1.2 相关网站链接
      • 1.3 效果展示
    • 二、XCharts导入
    • 三、XCharts快速使用
      • 3.1 添加一个简单图表
      • 3.2 添加多个Seire
      • 3.3 给图表添加其他组件
      • 3.4 添加Serie组件,如给折线图区域填充颜色
      • 3.5 个性化定制每个数据项的配置
      • 3.6 更多组件和配置参数
      • 3.7 快速调整参数
    • 四、代码操作
      • 4.1 用代码添加柱状图
      • 4.2 使用代码修改图表参数
      • 4.4 常用 API 调用方法
    • 五、实战案例
      • 5.1 从Excel中导入数据并更新图表案例
      • 5.2 偷袭XChartsDemo中的案例
  • 总结

在这里插入图片描述


前言

  • XCharts 是一款基于Unity3D的UGUI系统用于可视化图表制作的插件。
  • 可以使用该插件很轻松的绘制折线图、柱状图、饼图、雷达图、散点图、热力图、环形图、K线图、极坐标、平行坐标等图表。
  • 由于该插件功能强大、简单易用且非常轻量化使其受到很多用户的喜爱。本文就来介绍一下XCharts的简单使用方法!

【Unity 实用插件篇】| 可视化图表插件XCharts (折线图、柱状图、饼图等)详细教学

一、XCharts介绍

一款基于UGUI的功能强大、简单易用的数据可视化图表插件。支持折线图、柱状图、饼图、雷达图、散点图、热力图、环形图、K线图、极坐标、平行坐标等十多种内置图表,以及3D饼图、3D柱图、3D金字塔、漏斗图、仪表盘、水位图、象形柱图、甘特图、矩形树图等扩展图表。

1.1 特性

  • 参数可视化配置,效果实时预览,纯代码绘制,无需额外资源。
  • 支持折线图、柱状图、饼图、雷达图、散点图、热力图、环形图、K线图、极坐标、平行坐标等十种内置图表。
  • 支持3D柱图、漏斗图、金字塔、仪表盘、水位图、象形柱图、甘特图、矩形树图等多种扩展图表。
  • 支持直线图、曲线图、面积图、阶梯线图等折线图。
  • 支持并列柱图、堆叠柱图、堆积百分比柱图、斑马柱图等柱状图。
  • 支持环形图、玫瑰图等饼图。
  • 支持内置图表的任意组合,同一图中可同时显示多个相同或不同类型的图表。
  • 支持实线、曲线、阶梯线、虚线、点线、点划线、双点划线等线条。
  • 支持主题定制、导入和导出,内置明暗两种默认主题。
  • 支持自定义图表内容绘制,提供绘制点、线、面等其他图形的强大的绘图API。
  • 支持PC端和手机端上的数据筛选、视图缩放、细节展示等交互操作。
  • 支持万级大数据量绘制,支持采样绘制。
  • 支持TexMeshPro。
  • 支持所有5.6以上的Unity版本。
  • 支持 Input System (如何从 Input Manager 转 Input System)。

1.2 相关网站链接

XCharts 官方地址:XCharts
XCharts 官方使用文档:Documentation
XCharts API手册:API手册

XCharts源码 GitHub下载:github下载地址
XCharts源码 GitCode下载地址:GitCode下载地址
XCharts .unitypackage下载地址:.unitypackage下载

XCharts Demo:Demo下载地址

1.3 效果展示

图表效果展示
折线图请添加图片描述
柱状图请添加图片描述
饼图请添加图片描述
散点图请添加图片描述
K线图请添加图片描述
雷达图请添加图片描述
热力图请添加图片描述
其他请添加图片描述

上述各类图表的展示都是在XCharts Demo工程中看的,有需要的也可以去下载该案例进行测试学习,链接在前面也放过了。


二、XCharts导入

导入方式有三种,可以通过任一种方式导入的项目中:

1.直接将XCharts源码导入项目中
下载好XCharts源码后,直接将XCharts目录拷贝到Unity项目工程的Assets目录下。
在这里插入图片描述

2.通过Assets/Import Package导入XCharts
下载好XCharts的.unitypackage文件后,打开Unity,菜单栏 Assets–>Import Package–>选中.unitypackage导入即可开始使用XCharts。
在这里插入图片描述
在这里插入图片描述

3.通过Package Manager导入XCharts
对于Unity 2018.3以上版本,可通过 Package Manager来导入XCharts,打开Package Manager后,通过 Add package form git URL...,输入XCharts3.0的GitHub URL: https://github.com/XCharts-Team/XCharts.git#3.0 稍等片刻后即可使用XCharts。

也可以直接将package加入到manifest.json文件:打开Packages目录下的manifest.json文件,在dependencies下加入

"com.monitor1394.xcharts": "https://github.com/XCharts-Team/XCharts.git#3.0",

这里推荐使用第一种方式,通过上面的链接下载XCharts源码直接复制到我们自己的工程Assets文件夹下即可。


三、XCharts快速使用

3.1 添加一个简单图表

在Hierarchy窗口右键Create -> XCharts -> LineChart,或菜单栏XCharts下拉:XCharts->LineChart,即可快速创建一个简单的折线图。
在这里插入图片描述
在这里插入图片描述

3.2 添加多个Seire

在Inspector视图,找到LineChart的面板,通过Add Serie按钮,可以添加第二条、第三条Line折线:
在这里插入图片描述

3.3 给图表添加其他组件

默认图表没有Legend,需要Legend组件可通过Add Component按钮添加
在这里插入图片描述

3.4 添加Serie组件,如给折线图区域填充颜色

Serie只自带了几个常见的组件,其他组件按需额外添加。比如,需要给折线图区域填充颜色,可单独给Serie添加AreaStyle组件:
在这里插入图片描述

3.5 个性化定制每个数据项的配置

如果需要个性化定制每个数据项的配置,可以单独给每个SerieData添加Component。
比如我们给第二个折线图的第三个数据单独显示Label:
在这里插入图片描述

3.6 更多组件和配置参数

XCharts经过不断的迭代优化,目前已有多达几十种的主组件和子组件,每个组件有几个至几十个不等的可配置参数,以支持各种灵活而复杂的功能。

首次使用XCharts,可在 Inspector 视图添加各种图表,给图表添加或调整里面组件,Game 视图会实时反馈调整后的效果,以熟悉各种组件的使用。各个组件的详细参数说明可查阅XCharts配置项手册。

3.7 快速调整参数

XCharts 是配置和数据来驱动的。想要什么效果,只需要去调整对应组件下的配置参数就可以,不需要去改Hierarchy视图下的节点,因为那些节点是由XCharts内部根据配置和数据生成的,即使改了也会在刷新时还原回来。

如何快速定位想要改的效果所对应的组件,这就需要对组件有一定的了解。比如想要让X轴的轴线末端显示箭头,如何定位?
第一步,X轴定位到XAxis0;
第二步,轴线定位到AxisLine;
最后,再去看AxisLine组件下有没有这样的参数可以实现这个效果,对于不太确定的参数可以查阅XCharts配置项手册。

XCharts提供从全局Theme、系列Serie、单个数据项SerieData三方面全方位的参数配置。
优先级从大到小为:SerieData->Serie->Theme。以ItemStyle的颜色为例:

  1. 如果SerieData的ItemStyle配置有非0000颜色值,则优先用这个颜色值。
  2. 如果Serie的ItemStyle配置有非0000颜色值,则优先用这个颜色值。
  3. 否则颜色值取自主题Theme的Color Palette。

通常颜色值为0000时表示用主题默认颜色,配置为0或null时表示用主题默认配置。


四、代码操作

4.1 用代码添加柱状图

在场景的Canvas下新建一个GameObject对象,并创建一个脚本XChartsTest将其挂载到GameObject对象上。

脚本代码如下:

using UnityEngine;
using XCharts.Runtime;

public class XChartsTest : MonoBehaviour
{
    void Start()
    {
        CreateCharts();
    }

    void CreateCharts()
    {
        //1.添加柱状图
        var chart = gameObject.GetComponent<BarChart>();
        if (chart == null)
        {
            chart = gameObject.AddComponent<BarChart>();
            chart.Init();
        }

        //2.调整大小。代码动态设置尺寸,或直接操作chart.rectTransform,或直接在Inspector上改
        chart.SetSize(580, 300);

        //3.设置标题
        var title = chart.EnsureChartComponent<Title>();
        title.text = "简单柱状图";

        //4.设置提示框和图例是否显示
        var tooltip = chart.EnsureChartComponent<Tooltip>();
        tooltip.show = false;

        var legend = chart.EnsureChartComponent<Legend>();
        legend.show = false;


        //5.设置坐标轴
        var xAxis = chart.EnsureChartComponent<XAxis>();
        xAxis.splitNumber = 10;
        xAxis.boundaryGap = true;
        xAxis.type = Axis.AxisType.Category;

        var yAxis = chart.EnsureChartComponent<YAxis>();
        yAxis.type = Axis.AxisType.Value;


        //6.清空默认数据,添加Bar类型的Serie用于接收数据
        chart.RemoveData();
        chart.AddSerie<Bar>("bar");


        //7.添加10个数据
        for (int i = 0; i < 10; i++)
        {
            chart.AddXAxisData("x" + i);
            chart.AddData(0, Random.Range(10, 200));
        }
    }
}

这样一个简单的柱状图就出来了:
在这里插入图片描述

4.2 使用代码修改图表参数

使用代码修改图表参数的方法与正常在Unity中使用代码修改其它组件的参数一致,都是要先找到想要修改的图表组件或serie,然后使用代码调用相关参数进行修改。

    void UpdateDataCharts()
    {
        //1.修改主组件上的参数
        var title = chart.EnsureChartComponent<Title>();
        title.text = "天气预报";
        //title.subText = "normal line";
        var xAxis = chart.EnsureChartComponent<XAxis>();
        xAxis.splitNumber = 10;
        xAxis.boundaryGap = true;
        xAxis.type = Axis.AxisType.Category;

        //2.给主组件添加额外组件
        var legend = chart.EnsureChartComponent<Legend>();


        //3.修改serie的参数
        var serie = chart.GetSerie<Line>();//通过类型获取serie
        //var serie = chart.GetSerie(0);//通过索引获取serie
        serie.serieName = "上海";
        serie.state = SerieState.Normal;
        serie.animation.dataChangeEnable = true;
        serie.large = true;


        //4.给Serie添加额外组件:
        var label = serie.EnsureComponent<LabelStyle>();
        label.offset = new Vector3(0, 20, 0);
        label.rotate = 30;


        //5.修改数据项SerieData上的参数
        chart.ClearData();
        var serieData1 = chart.AddData(0, 20);//添加新的数据
        var serieData2 = chart.AddData(0, 50);
        var serieData3 = chart.AddData(0, 40);
        var serieData4 = chart.AddData(0, 25);
        var serieData5 = chart.AddData(0, 35);
        var serieData6 = chart.AddData(0, 5);
        for (int i = 0; i < 6; i++)
        {
            xAxis.AddData((i + 1).ToString());
        }
        var serieData = serie.GetSerieData(1); //从已有数据中获取

        var itemStyle = serieData.EnsureComponent<LabelStyle>(); //启用SerieData的Component
        itemStyle.offset = new Vector3(0, 20, 0);
        itemStyle.background.show = false;
        itemStyle.textStyle.color = Color.green;


        //6.更新指定系列中的指定索引数据。
        var dataCount = serie.dataCount;
        chart.UpdateData(0, Random.Range(0, dataCount), Random.Range(0, 50));
        chart.RefreshChart();//刷新图表绘制
    }

修改后效果如下:
在这里插入图片描述

除了上面介绍的方法之外还可以用代码控制更多的参数,Examples下还有更多的其他例子,凡是Inspector上看到的可配置的参数,都可以通过代码来设置。XCharts配置项手册里面的所有参数都是可以通过代码控制的。

4.4 常用 API 调用方法

  1. chart.ClearData():清空图表数据(不移除Series)
  2. chart.RemoveData():清除图表数据(会移除所有Serie)
  3. chart.AddSerie():添加Serie
  4. chart.AddXAxisData():添加X轴数据
  5. chart.AddData():添加Serie数据
  6. chart.UpdateData():更新Serie数据
  7. chart.UpdateXAxisData():更新X轴数据
  8. chart.UpdateDataName():更新Serie数据的名字

XCharts内部有自动刷新机制,但也是在一定条件才会触发。如果自己调用了内部组件的接口,碰到组件没有刷新,确实找不到原因的话,可以用以下两个接口强制刷新:

  1. chart.RefreshAllComponent():刷新图表组件,会重新初始化所有组件,不建议频繁待用。
  2. chart.RefreshChart():刷新图表绘制,只刷新绘制部分,不会刷新组件文本,位置等部分。
  3. 各个组件也可以通过SetAllDirty()只刷新自己。

五、实战案例

5.1 从Excel中导入数据并更新图表案例

下面演示的是从Excel表格中获取不同城市的天气温度,然后使用XCharts导入数据生成对应的图表。

先看一下Excel的结构:
在这里插入图片描述
运行效果如下:
在这里插入图片描述
请添加图片描述

脚本代码如下:

    void ImportExcelTest()
    {
        //这里设置需要读取的文件的路径
        string FilePath = Application.streamingAssetsPath + "/weather.xlsx";
        //读取该文件
        FileStream stream = File.Open(FilePath, FileMode.Open, FileAccess.Read);
        //读取Excel文件
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
        DataSet result = excelReader.AsDataSet();

        int columns = result.Tables[0].Columns.Count;
        int rows = result.Tables[0].Rows.Count;
        Debug.Log($"列数:{columns},行数:{rows}");

        //1.添加折线图
        var chart = gameObject.GetComponent<LineChart>();
        if (chart == null)
        {
            chart = gameObject.AddComponent<LineChart>();
            chart.Init();
        }

        //2.设置折线图的标题和图例
        var title = chart.EnsureChartComponent<Title>();
        title.text = "天气";
        var legend = chart.EnsureChartComponent<Legend>();
        legend.show = true;

        //4.清空默认数据
        chart.RemoveData();

        //5.设置坐标轴,从Excel表中获取数据
        var xAxis = chart.EnsureChartComponent<XAxis>();
        xAxis.splitNumber = 10;
        xAxis.boundaryGap = true;
        xAxis.type = Axis.AxisType.Category;
        var yAxis = chart.EnsureChartComponent<YAxis>();
        yAxis.type = Axis.AxisType.Value;

        for (int i = 0; i < columns - 1; i++)
        {
            chart.AddXAxisData(result.Tables[0].Rows[0][i + 1].ToString());
        }

        //7.添加Line类型的Serie用于接收数据,从Excel表中获取数据
        for (int i = 0; i < rows - 1; i++)
        {
            //根据表中城市数创建serie
            var citySerie = chart.AddSerie<Line>("line" + i);
            citySerie.serieName = result.Tables[0].Rows[i+1][0].ToString();
            
			//给每个点显示数值
            var label = citySerie.EnsureComponent<LabelStyle>();
            label.offset = new Vector3(0, 20, 0);
            label.rotate = 30;

            for (int j = 0; j < columns - 1; j++)
            {
                //获取表中的数值
                string value = result.Tables[0].Rows[i+1][j+1].ToString();
                chart.AddData(i, int.Parse(value));//添加Serie数据
                //chart.UpdateData(citySerie.serieName,i, int.Parse(value)); //更新Serie数据
            }
        }
    }

此处的案例是通过读取一个Excel表格然后在Unity中赋值给图表,然后绘制对应的图标图形。

从其他地方读取数据也是同样的操作,只要能拿到数据,然后就可以调用对应的代码调参数进行赋值绘制即可。

可以再看一下上述表格的其他图表绘制的效果。
在这里插入图片描述

5.2 偷袭XChartsDemo中的案例

前面讲过XCharts有一个用于演示Demo工程,里面有各种类型的演示图表。

那若如果有觉得里面哪个图表特别好看或满足自己的需求的,就可以直接去Demo工程里将对应的预制体复制出来放到我们自己的工程中使用啦!
在这里插入图片描述

直接复制过来根据需求改下数值就可以直接使用啦!
在这里插入图片描述


总结

  • 关于XCharts的使用操作还有很多,本文只是介绍了一些比较常用的功能。
  • 通过图标面板属性就可以看出,有超级多的参数可以配置,可以用于显示自己个性化的图表需求。
  • 更多的使用方法及参数可以通过查看官方的文档及API按需学习就好啦!

  • 🎬 博客主页:https://xiaoy.blog.csdn.net

  • 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉

  • 🎄 学习专栏推荐:Unity系统学习专栏

  • 🌲 游戏制作专栏推荐:游戏制作

  • 🌲Unity实战100例专栏推荐:Unity 实战100例 教程

  • 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

请添加图片描述请添加图片描述请添加图片描述

请添加图片描述

资料白嫖,技术互助

学习路线指引(点击解锁)知识定位人群定位
🧡 Unity系统学习专栏 🧡入门级本专栏从Unity入门开始学习,快速达到Unity的入门水平
💛 Unity实战类项目 💛进阶级计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。
❤️ 游戏制作专栏 ❤️ 难度偏高分享学习一些Unity成品的游戏Demo和其他语言的小游戏!
💚 游戏爱好者万人社区💚 互助/吹水数万人游戏爱好者社区,聊天互助,白嫖奖品
💙 Unity100个实用技能💙 Unity查漏补缺针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺

在这里插入图片描述

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

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

相关文章

什么是Maven,Maven的概述及基本使用

MAVEN 一、Maven简介1.1、Maven概述1.2、Maven仓库1.3项目获取jar包过程 二、Maven使用2.1Maven安装配置2.1.1配置环境变量2.1.2配置本地仓库2.1.3配置阿里云私服 2.2Maven基本使用2.2.1Maven常用指令2.2.2Maven生命周期 总结 一、Maven简介 Apache Maven是一个项目管理和构建…

自动驾驶数据标注有哪些?

自动驾驶汽车&#xff1a;人工智能(AI)的焦点 人工智能驱动汽车解决方案的市场规模预计到 2025年将增长十倍以上&#xff0c;提升车内体验的商机领域以及 AI 模型的无偏见训练数据的重要性。在本篇中&#xff0c;我们将介绍车外体验的关键组成部分&#xff0c;以及自动驾驶数据…

Python 爬虫的学习 day01 ,爬虫的基本知识, requests 和 charde模块, get函数的使用

1.Python 爬虫 1.1什么是网络爬虫 网络爬虫&#xff0c;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本&#xff0c;另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 1.2 网络爬虫的特…

2023/7/26总结

最近都花时间在项目上 修改了发布文章的界面 然后文章可以上传图片了 修改了个人主页的界面&#xff08;这里把js代码注释掉了&#xff0c;所以没用内容&#xff09; 大概画了一下管理员的界面 和消息列表的界面 做了评论的界面&#xff1a;&#xff08;还没开始写&#xff0c…

“华为杯”研究生数学建模竞赛2019年-【华为杯】F题:多约束条件下智能飞行器航迹快速规划

目录 摘 要&#xff1a; 一、 问题重述 1.1 问题背景 1.2 需要解决的问题 二、 模型假设 三、符号说明 四、问题一 4.1 问题描述与分析 4.2 模型建立 4.2.1 数据处理 4.2.2 航迹规划模型建立 4.3 求解算法建立 4.3.1 最短路径数学表达 4.3.2 自适应改进型 Dijkstr…

力扣热门100题之合并区间【中等】

题目描述 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;interv…

Docker啥是数据持久化?

文章目录 数据持久化数据卷相关命令创建读写数据卷创建只读数据卷数据卷共享数据卷容器实现数据卷共享nginx实现数据卷共享nfs总结 Dockerfile持久化Dockerfile方式docker run总结 数据持久化 ​ 在容器层的 UnionFS&#xff08;联合文件系统&#xff09;中对文件/目录的任何修…

动态分段的JavaScript实现【线性参考】

有许多很酷的 GIS 应用程序将海拔和距离结合在一起。 当用户沿着高程图拖动光标时&#xff0c;地图上的位置通常会更新。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 在尝试将此功能构建到我的一个项目中时&#xff0c;我了解到它需要一种称为线性参考&#xff08;…

java排序算法之插入排序

文章目录 &#x1f4cb;插入排序概念&#x1f4d6;实现步骤&#x1f516;代码示例 &#x1f4c8;总结 &#x1f4cb;插入排序概念 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法。它将数组划分为已排序和未排序两个部分&#xff0c;每次从未排序部分…

iTOP-RK3568开发板Docker 安装 Ubuntu 18.04

Docker 下载安装 Ubuntu18.04&#xff0c;输入以下命令&#xff1a; sudo apt update docker pull ubuntu:18.04 切换 Shell 到 Ubuntu 18.04&#xff0c;输入以下命令&#xff1a; docker container run -p 8000:3000 -it ubuntu:18.04 /bin/bash -p 参数&#xff1a;容器的…

Shell脚本学习-shift语句的使用

[rootvm1 scripts]# help shift shift: shift [n]Shift positional parameters.Rename the positional parameters $N1,$N2 ... to $1,$2 ... If N isnot given, it is assumed to be 1.Exit Status:Returns success unless N is negative or greater than $#.说明&#xff1a…

vue解决跨域访问问题(个人学习笔记六)

目录 友情提醒第一章、跨越问题解决1.1&#xff09;什么是跨域问题&#xff1f;1.2&#xff09;第一种解决方式&#xff1a;后端设置允许跨域访问1.3&#xff09;第二种解决方式&#xff1a;前端配置代理 第二章、配置代理服务器2.1&#xff09;配置简单代理服务器2.2&#xff…

GPT-AI 使用的技术概览

ChatGPT 使用的技术概览 智心AI-3.5/4模型&#xff0c;联网对话&#xff0c;MJ快速绘画 从去年 OpenAI 发布 ChatGPT 以来&#xff0c;AI 的能力再次惊艳了世人。在这样的一个时间节点&#xff0c;重新去学习相关技术显得很有必要。 ChatGPT 的内容很多&#xff0c;我计划采用…

Git下载与安装

文章目录 一、Git下载二、Git安装1.双击下载好的安装包进行安装2.Next3.选择Git的安装目录(不要带有中文和空格)→Next4.Next5.Next6.Next7.Next8.Next9.Next10.Next11.Next12.Next13.Next14.Next15.Next16.Install17.等待安装18.Finish19.鼠标光标放到系统桌面右击看到如下图所…

【Python】数据分析+数据挖掘——探索Pandas中的索引与数据组织

前言 在数据科学和数据分析领域&#xff0c;Pandas是一个备受喜爱的Python库。它提供了丰富的数据结构和灵活的工具&#xff0c;帮助我们高效地处理和分析数据。其中&#xff0c;索引在Pandas中扮演着关键角色&#xff0c;它是一种强大的数据组织和访问机制&#xff0c;使我们…

Java那些“锁”事 - 公平锁和非公平锁

在Java中&#xff0c;锁可以分为公平锁&#xff08;Fair Lock&#xff09;和非公平锁&#xff08;Nonfair Lock&#xff09;&#xff0c;它们的区别在于线程获取锁的顺序是否遵循公平性原则。 公平锁 公平锁是指多个线程按照它们发出请求的顺序获取锁&#xff0c;即先到先得的原…

QT:当登录成功时,关闭登录界面,跳转到新的界面中

1> 继续完善登录框&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;跳转到新的界面中 widget.h #include "widget.h" //#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent)//, ui(new Ui::Widget) {//ui->setu…

Cesium态势标绘专题-集结地(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

IOS自动化测试环境搭建教程

目录 一、前言 二、环境依赖 1、环境依赖项 2、环境需求与支持 三、环境配置 1、xcode安装 2、Git安装 3、Homebrew安装&#xff08;用brew来安装依赖&#xff09; 4、npm和nodejs安装 5、libimobiledevice安装 6、idevicesinstaller安装 7、ios-deploy安装 8、Ca…

DRS 迁移本地mysql 到华为云

准备工作&#xff1a; 源端的IP地址&#xff08;公网&#xff09;&#xff0c;用户明和密码。如果通过公网迁移&#xff0c;需要在安全组放通drs访问源端数据库的3306端口。目标端的IP地址&#xff0c;用户名和密码。 创建DRS迁移任务 创建迁移任务 登录华为云控制台。单击管…