Qt 三维柱状图 Q3DBar 和 三维条形图中的数据序列 QBar3DSeries

(一) 使用 Q3DBars 图形类和 QBar3DSeries 序列类可以绘制三维柱状图

窗口右侧是用 Q3DBars 和 QBar3DSeries 绘制的三维柱状图,这个图只有一个QBar3DSeries序列,数据是按行存储的,可以有多行。水平方向是行坐标轴和列坐标轴,使用OCategory3DAxis 坐标轴类;垂直方向是数值坐标轴,使用 QValue3DAxis 坐标轴类。在图上点击一个棒柱时,可以在图上显示其行标签、列标签和数值,状态栏上还会显示其行编号、列编号和数值。无须额外编程或设置,在图上按住鼠标右键并上下左右拖动鼠标可以进行水平和垂直方向的旋转,滚动鼠标滚轮可以进行缩放。 窗口工具栏上的按钮用于修改棒柱的基本颜色,修改选中棒柱的数值,添加、插入或删除行等。 窗口左侧是操作面板,分为多个分组框。

  • “旋转和平移”分组框。可以选择预设的三维图观察视角,可以通过 QSlider 组件进行水平旋转、垂直旋转和缩放。
  • 分组框里的4个方向按钮用于使三维柱状图在4个方向上平移,中间的按钮用于复位视角。
  • “图形总体”分组框。用于设置三维图形的主题、标签字体大小、棒柱选择模式,以及设置三维图形的各种元素的可见性和显示效果等。
  • “序列设置”分组框。设置序列的一些属性,如棒柱的样式、光滑效果等。

效果图:
在这里插入图片描述

(二) 3D部件创建及添加到窗口

1 添加三维图Q3DBars 三维图的容器QWidget和三维条形图中的数据序列QBar3DSeries

private:QWidget* graphContainer;        //三维图的容器Q3DBars* graph3D;               //三维图QBar3DSeries* series;           //三维条形图中的数据序列

2 初始化 3D部件并添加到窗口

void mainwindow::iniGraph3D()
{graph3D = new Q3DBars();            //创建三维图graphContainer = QWidget::createWindowContainer(graph3D, this);//Q3DBars继承自QWindowgraph3D->scene()->activeCamera()    //设置视角->setCameraPreset(Q3DCamera::CameraPresetFrontHigh); //设置 Z坐标轴QValue3DAxis* axisV = new QValue3DAxis; //数值坐标axisV->setTitle(QString::fromLocal8Bit("销量"));axisV->setTitleVisible(true);axisV->setLabelFormat("%d");graph3D->setValueAxis(axisV);  			 //设置数值坐标轴//设置 X坐标轴QCategory3DAxis* axisRow = new QCategory3DAxis;axisRow->setTitle("row axis");axisRow->setTitleVisible(true);graph3D->setRowAxis(axisRow);  			 //设置行坐标轴//设置 Y坐标轴QCategory3DAxis* axisCol = new QCategory3DAxis;axisCol->setTitle("column axis");axisCol->setTitleVisible(true);graph3D->setColumnAxis(axisCol);		//设置列坐标轴//创建序列series = new QBar3DSeries;series->setMesh(QAbstract3DSeries::MeshCylinder);       //棒柱形状series->setItemLabelFormat("(@rowLabel,@colLabel): %d");//项的标签显示格式graph3D->addSeries(series);//设置数据代理的数据QBarDataArray* dataArray = new QBarDataArray; //棒柱数据数组,typedef QList<QBarDataRow *> QBarDataArray;for (int i = 0; i <3; i++)   			  //行{QBarDataRow* dataRow = new QBarDataRow;   //棒柱数据行,typedef QList<QBarDataItem> QBarDataRow;for (int j = 1; j <= 5; j++)          //列{quint32 value = rand()%15+1;          //随机整数[1,15]QBarDataItem* dataItem = new QBarDataItem;//创建棒柱数据对象dataItem->setValue(value);            //设置棒柱的数据dataRow->append(*dataItem);           //添加到棒柱数据行}dataArray->append(dataRow);               //棒柱数据数组添加一个棒柱数据行}QStringList rowLabs;    //行坐标标签rowLabs << "Week1" << "Week2" << "Week3";series->dataProxy()->setRowLabels(rowLabs); //设置数据代理的行标签QStringList colLabs;    //列坐标标签colLabs << "Mon" << "Tue" << "Wed" << "Thur" << "Fri";series->dataProxy()->setColumnLabels(colLabs);//设置数据代理的列标签series->dataProxy()->resetArray(dataArray);   //重设数据代理的数据connect(series, &QBar3DSeries::selectedBarChanged,this, &mainwindow::do_barSelected);
}

2-1 设置项标签格式

如果没有为该系列显式设置数据代理,则该系列将创建默认代理。设置另一个代理将销毁现有代理以及添加到其中的所有数据。

标签格式注释
@rowTitle来自行轴的标题
@colTitle列轴的标题
@valueTitle来自值轴的标题
@rowIdx可见行索引,使用图形区域设置进行了本地化
@colIdx可见列索引,使用图形区域设置进行了本地化
@rowLabel来自行轴的标签
@colLabel来自列轴的标签
@valueLabel使用附加到图形的值轴格式格式化的项值
@seriesName系列的名称
%<format spec>指定格式的项值。使用与QValue3DAxis::abelFormat相同的规则进行格式化

3 选中棒柱

void mainwindow::do_barSelected(const QPoint& position)
{if (position.x() < 0 || position.y() < 0)  //必须加此判断{ui->actBar_ChangeValue->setEnabled(false);return;}ui->actBar_ChangeValue->setEnabled(true);const QBarDataItem* bar = series->dataProxy()->itemAt(position);QString info = QString::fromLocal8Bit("选中的棒柱,Row=%1, Column=%2, Value=%3").arg(position.x()).arg(position.y()).arg(bar->value());ui->statusBar->showMessage(info);
}

(三) 3D部件创建及添加到窗口

1 序列颜色 - 设置序列基本颜色

void mainwindow::on_actSeries_BaseColor_triggered()
{//设置序列基本颜色QColor  color = series->baseColor();color = QColorDialog::getColor(color);if (color.isValid()){series->setBaseColor(color);}        
}

2 重新生成 - 重新生成数据画图

void mainwindow::on_actRedraw_triggered()
{QBarDataProxy* dataProxy = new QBarDataProxy;    //新建数据代理int rowCount = series->dataProxy()->rowCount();  //数据代理的行数for (int i = 0; i < rowCount; i++)  //行{QBarDataRow* dataRow = new QBarDataRow;       //棒柱数据行for (int j = 1; j <= 5; j++)     //列{quint32 value = rand() % (15 - 5 + 1) + 5;QBarDataItem* dataItem = new QBarDataItem;   //数据项dataItem->setValue(value);dataRow->append(*dataItem);}QString rowStr = QString::fromLocal8Bit("第%1周").arg(i + 1);dataProxy->addRow(dataRow, rowStr);     //添加行数据和标签}QStringList colLabs = series->dataProxy()->columnLabels();    //原来的列坐标轴标签dataProxy->setColumnLabels(colLabs);series->dataProxy()->resetArray();  //清除数据代理和坐标轴标签,必须清除,否则不能重新设置坐标轴标签series->setDataProxy(dataProxy);    //重新设置数据代理,会删除之前的数据代理
}

3 修改数值 - 修改选中棒柱的数值(F2)

void mainwindow::on_actBar_ChangeValue_triggered()
{QPoint position = series->selectedBar();if (position.x() < 0 || position.y() < 0)   //必须加此判断return;QBarDataItem bar = *(series->dataProxy()->itemAt(position));qreal value = bar.value();    //原来的值bool ok;value = QInputDialog::getInt(this, QString::fromLocal8Bit("输入数值"),QString::fromLocal8Bit("更改棒柱数值"), value, 0, 50, 1, &ok);if (ok){bar.setValue(value);series->dataProxy()->setItem(position, bar);}
}

4 添加行 - 添加一行

void mainwindow::on_actData_Add_triggered()
{//添加行const QString rowLabel = QInputDialog::getText(this,QString::fromLocal8Bit("输入字符串"),QString::fromLocal8Bit("请输入行标签"));if (rowLabel.isEmpty())return;QBarDataRow* dataRow = new QBarDataRow;       //棒柱数据行for (int j = 1; j <= 5; j++)     //固定5列{quint32 value = rand()%(25 - 15 + 1) + 15;QBarDataItem* dataItem = new QBarDataItem;dataItem->setValue(value);dataRow->append(*dataItem);}series->dataProxy()->addRow(dataRow, rowLabel);     //添加棒柱数据行和标签}

5 插入行 - 插入一行

void mainwindow::on_actData_Insert_triggered()
{//插入行QString rowLabel = QInputDialog::getText(this, QString::fromLocal8Bit("输入字符串"), QString::fromLocal8Bit("请输入行标签"));if (rowLabel.isEmpty())return;QPoint position = series->selectedBar();int index = position.x(); //当前行号if (index < 0)index = 0;QBarDataRow* dataRow = new QBarDataRow;       //棒柱数据行for (int j = 1; j <= 5; j++)     //固定5列{quint32 value = rand() % (30 - 20) + 20; QBarDataItem* dataItem = new QBarDataItem;dataItem->setValue(value);dataRow->append(*dataItem);}series->dataProxy()->insertRow(index, dataRow);    //插入棒柱数据行}

6 删除行 - 删除当前行

void mainwindow::on_actData_Delete_triggered()
{QPoint position = series->selectedBar();if (position.x() < 0 || position.y() < 0)return;int rowIndex = position.x();  //当前行号int removeCount = 1;          //删除的行数int removeLabels = true;      //是否删除行标签series->dataProxy()->removeRows(rowIndex, removeCount, removeLabels);
}

7 退出 - 退出本程序

void mainwindow::on_actQiut_triggered()
{QApplication::quit();
}

(四) “旋转和平移”分组框功能

1 预设视角

void mainwindow::on_comboCamera_currentIndexChanged(int index)
{Q3DCamera::CameraPreset  cameraPos =  Q3DCamera::CameraPreset(index);graph3D->scene()->activeCamera()->setCameraPreset(cameraPos);
}

预设视角类型参考 enum Q3DCamera::CameraPreset

2 水平旋转

void mainwindow::on_sliderH_valueChanged(int value)
{graph3D->scene()->activeCamera()->setXRotation(value);
}

3 垂直旋转

void mainwindow::on_sliderV_valueChanged(int value)
{graph3D->scene()->activeCamera()->setYRotation(value);
}

4 缩放

void mainwindow::on_sliderZoom_valueChanged(int value)
{graph3D->scene()->activeCamera()->setZoomLevel(value);
}

5 下移

void mainwindow::on_btnMoveDown_clicked()
{QVector3D target3D = graph3D->scene()->activeCamera()->target();qreal z = target3D.z();target3D.setZ(z + 0.1);graph3D->scene()->activeCamera()->setTarget(target3D);
}

6 上移

void mainwindow::on_btnMoveUp_clicked()
{QVector3D target3D = graph3D->scene()->activeCamera()->target();qreal z = target3D.z();target3D.setZ(z - 0.1);graph3D->scene()->activeCamera()->setTarget(target3D);
}

7 左移

void mainwindow::on_btnMoveLeft_clicked()
{QVector3D target3D = graph3D->scene()->activeCamera()->target();qreal x = target3D.x();target3D.setX(x + 0.1);graph3D->scene()->activeCamera()->setTarget(target3D);
}

8 右移

void mainwindow::on_btnMoveRight_clicked()
{QVector3D target3D = graph3D->scene()->activeCamera()->target();qreal x = target3D.x();target3D.setX(x - 0.1);graph3D->scene()->activeCamera()->setTarget(target3D);
}

9 复位(到 FrontHigh 视角)

void mainwindow::on_btnResetCamera_clicked()
{graph3D->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFrontHigh);

(五) “图形总体”分组框功能

1 显示选中棒柱的标签 CheckBox

void mainwindow::on_cBoxTheme_currentIndexChanged(int index)
{Q3DTheme* currentTheme = graph3D->activeTheme();currentTheme->setType(Q3DTheme::Theme(index));
}

2 轴标签字体大小

void mainwindow::on_spinFontSize_valueChanged(int arg1)
{QFont font = graph3D->activeTheme()->font();font.setPointSize(arg1);graph3D->activeTheme()->setFont(font);   
}

3 选择模式

void mainwindow::on_cBoxSelectionMode_currentIndexChanged(int index)
{graph3D->setSelectionMode(QAbstract3DGraph::SelectionFlags(index));
}

4 显示背景 CheckBox

void mainwindow::on_chkBoxBackground_clicked(bool checked)
{graph3D->activeTheme()->setBackgroundEnabled(checked);
}

4-1 选择模式

enum QAbstract3DGraph::SelectionFlag

枚举值含义
QAbstract3DGraph::SelectionNone不允许选择
QAbstract3DGraph::SelectionItem选择并且高亮显示一个项
QAbstract3DGraph::SelectionRow选择并且高亮显示一行
QAbstract3DGraph::SelectionItemAndRow选择一个项和一行,用不同颜色高亮显示
QAbstract3DGraph::SelectionColumn选择并且高亮显示一列
QAbstract3DGraph::SelectionItemAndColumn选择一个项和一列,用不同颜色高亮显示
QAbstract3DGraph::SelectionRowAndColumn选择交叉的一行和一列
QAbstract3DGraph::SelectionItemRowAndColumn选择交叉的一行和一列,用不同颜色高亮显示
QAbstract3DGraph::SelectionSlice切片选择,需要与 SelectionRow 或 SelectionColumn 结合使用
QAbstract3DGraph::SelectionMultiSeries选中同一个位置处的多个序列的项

5 显示背景网格 CheckBox

void mainwindow::on_chkBoxGrid_clicked(bool checked)
{graph3D->activeTheme()->setGridEnabled(checked);
}

6 显示倒影 CheckBox

void mainwindow::on_chkBoxReflection_clicked(bool checked)
{graph3D->setReflection(checked);
}

7 数值坐标轴反向 CheckBox

void mainwindow::on_chkBoxReverse_clicked(bool checked)
{graph3D->valueAxis()->setReversed(checked);
}

8 显示轴标题 CheckBox

void mainwindow::on_chkBoxAxisTitle_clicked(bool checked)
{graph3D->valueAxis()->setTitleVisible(checked);graph3D->rowAxis()->setTitleVisible(checked);graph3D->columnAxis()->setTitleVisible(checked);
}

9 显示轴标签背景 CheckBox

void mainwindow::on_chkBoxAxisBackground_clicked(bool checked)
{graph3D->activeTheme()->setLabelBackgroundEnabled(checked);
}

(六) “序列设置”分组框功能

1 棒柱样式 ComboBox

void mainwindow::on_cBoxBarStyle_currentIndexChanged(int index)
{QAbstract3DSeries::Mesh aMesh;aMesh = QAbstract3DSeries::Mesh(index + 1);  //0=MeshUserDefinedseries->setMesh(aMesh);
}

1-1 棒柱形状

enum QAbstract3DSeries::Mesh
并非所有样式都可用于所有可视化类型。

常量注释
QAbstract3DSeries::MeshUserDefined0用户定义网格,通过QAbstract3DSeries::userDefinedMesh属性设置
QAbstract3DSeries::MeshBar1基本矩形条
QAbstract3DSeries::MeshCube2基本多维数据集
QAbstract3DSeries::MeshPyramid3四边形金字塔
QAbstract3DSeries::MeshCone4基本圆锥体
QAbstract3DSeries::MeshCylinder5基本气缸
QAbstract3DSeries::MeshBevelBar6略微倾斜(圆形)的矩形钢筋
QAbstract3DSeries::MeshBevelCube7略微倾斜(圆形)的立方体
QAbstract3DSeries::MeshSphere8球体
QAbstract3DSeries::MeshMinimal9最小的三维网格:一个三角锥
QAbstract3DSeries::MeshArrow10向上的箭头
QAbstract3DSeries::MeshPoint112D点

2 光滑效果 CheckBox

void mainwindow::on_chkBoxSmooth_clicked(bool checked)
{series->setMeshSmooth(checked);
}

3 显示选中棒柱的标签 CheckBox

void mainwindow::on_chkBoxItemLabel_clicked(bool checked)
{series->setItemLabelFormat("value at (@rowLabel,@colLabel): %.1f");series->setItemLabelVisible(checked);
}

(七) 有关QBarDataProxy数据管理接口

函数功能
int addRow()添加一行数据,一行数据是 QBarDataRow 类型对象
void insertRow()在某行之前插入一行数据
void removeRows()从某行开始,移除指定行数的数据
void setRow ()为某一行重新设置一行数据
QBarDataRow *rowAt()返回某一行的数据
void setItem()根据行号和列号,设置某个棒柱数据项
QBarDataltem *itemAt()根据行号和列号,返回单个棒柱数据项
void resetArray()若不带任何参数,就清除数据代理所有的数据和标签;若使用一个 QBarDataArray类型的对象作为输入参数,就重新设置棒柱数据数组
int rowCount()返回数据代理的行数
void setRowLabels()用一个字符串列表设置行坐标轴的标签
StringList rowLabels()返回行坐标轴的所有标签
void setColumnLabels()用一个字符串列表设置列坐标轴的标签
QStringList columnLabels()返回列坐标轴的所有标签

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

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

相关文章

阿里云服务器新购、续费、升级优惠政策与活动汇总

阿里云作为国内领先的云服务提供商&#xff0c;始终致力于为客户提供优质、高效的服务。为了更好地满足客户的需求&#xff0c;阿里云经常推出各种优惠政策与活动。本文将为大家详细介绍阿里云服务器的新购、续费、升级优惠政策与优惠活动&#xff0c;帮助大家更好地了解并利用…

雪花代码-html版

雪花代码 动画效果 代码 <!DOCTYPE html><html><head><style>body {background-color: #000000;}.snowflake {position: absolute;font-size: 10px;color: #FFFFFF;text-shadow: 1px 1px 1px #000000;user-select: none;}</style></head>…

MySQL中datetime和timestamp的区别

datetime和timestamp的区别 相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储…

Vue.js设计与实现阅读-2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别&#xff0c;前者关注过程&#xff0c;后者关注结果了解了虚拟dom存在的意义&#x…

Java中的多线程

进程和线程的概念 进程是应用程序的执行实例有独立的内存空间和系统资源。 线程是进程中执行运算的最小单位&#xff0c;可完成一个独立的顺序控制流程 一。一个进程可以包含多个线程&#xff0c;每个线程都独立执行特定的任务&#xff0c; 是CPU调度和分派的基本单位。 多线…

轴承滚珠故障的理论推导与计算(修订中...)

1.缘起 轴承故障故障位置在高频&#xff0c;如果不即时处理&#xff0c;恶化后&#xff0c;滚珠会有单颗故障迅速恶化到多颗&#xff0c;如果此时电机承载较大负载&#xff0c;轴承的恶化&#xff0c;会牵连到相关的动力轴。是一个不可不进行监测的项目。 2.频谱特征 轴承的…

【AWS】使用亚马逊云服务器创建EC2实例

目录 前言为什么选择 Amazon EC2 云服务器搭建 Amazon EC2 云服务器注册亚马逊账号登录控制台服务器配置免费套餐预览使用 Amazon EC2 云服务器打开服务器管理界面设置服务器区域填写实例名称选择服务器系统镜像选择实例类型创建密钥对网络设置配置存储启动实例查看实例 总结 前…

Window平台安装MongoDB

在部署前需要在官网先确定系统对应的Mongo DB版本。 本机电脑为Window10&#xff0c;所以这里以MongoDB 6.0版本。 1 在官网下载安装包 2 安装MongoDB MongoDB Compass 是一个图形界面管理工具&#xff0c;如果勾选了安装会花费长一点时间&#xff0c;可以取消掉勾选&#xff…

2024最新适用于 Windows 、Mac 的最佳屏幕录制软件

屏幕录制软件可以帮助我们录制 PC 和MacBook的实时屏幕视频。如果您想为 优酷录制视频&#xff0c;或者您正在为您的公司制作基于视频的项目&#xff0c;并且需要捕获屏幕的实时视频录制&#xff0c;那么我们在此列出了 一 款适合您的 Windows 、Mac的 2024 年最佳屏幕录制软件…

《NLP入门到精通》栏目导读

一、说明 栏目《NLP入门到精通》本着从简到难得台阶式学习过度。将自然语言处理得知识贯穿过来。本栏目得前导栏目是《深度学习》、《pytorch实践》&#xff0c;因此&#xff0c;读者需要一定得深度学习基础&#xff0c;才能过度到此栏目内容。 二、博客建设理念 本博客基地&am…

Transformer详解【学习笔记】

文章目录 1、Transformer绪论2、Encoders和Decoder2.1 Encoders2.1.1 输入部分2.1.2 多头注意力机制2.1.3 残差2.1.4 LayNorm&#xff08;Layer Normalization&#xff09;2.1.5 前馈神经网路 2.2 Decoder2.2.1 多头注意力机制2.2.2 交互层 1、Transformer绪论 Transformer在做…

RabbitMQ(十)队列的声明方式

目录 1.编程式声明补充&#xff1a;RabbitTemplate 和 AmqpAdmin 的区别 2.声明式声明补充&#xff1a;new Queue() 和 QueueBuilder.durable(queueName).build() 的区别 背景&#xff1a; 在学习 RabbitMQ 的使用时&#xff0c; 经常会遇到不同的队列声明方式&#xff0c;有的…

Redis管道操作

文章目录 1. 问题提出2. 解决方案3. 案例演示4. 总结 1. 问题提出 如何优化频繁命令往返造成的性能瓶颈&#xff1f; Redis是一种基于C/S一级请求响应协议的TCP服务&#xff0c;一个请求会遵循一下步骤&#xff1a; 客户端向服务端发送命令分四步&#xff08;发送命令-> …

个人网站制作 Part 1 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 项目概述&#x1f527; 开发工具和环境配置&#x1f6e0; 项目实现步骤步骤 1: 创建HTML文件步骤 2: 添加CSS样式步骤 3: 链接CSS文件步骤 4: 添加JavaScript交互 &#…

Unity中向量的点乘、叉乘区别和作用以及经典案例

文章目录 点乘&#xff08;Dot Product&#xff09;叉乘&#xff08;Cross Product&#xff09;向量归一化&#xff08;Normalize&#xff09;其他作用 unity开发中我们要计算角度&#xff0c;判断位置&#xff0c;常用点乘、叉乘、归一化等等&#xff0c;我们看看他们的使用案…

tiktok_浅谈hook ios之发包x-ss-stub

frida-trace ios手机一部&#xff0c;需要越狱的电脑一台idacrackerXI 目标app&#xff1a; ipa 包&#xff0c;点击前往 密码&#xff1a;8urs 协议分析起始从抓包开始&#xff0c;个人习惯 一般安卓逆向可以直接搜关键词&#xff0c;但是ios 都在 Mach-O binary (reverse…

微服务-Gateway

案例搭建 官网地址 父Pom <com.alibaba.cloud.version>2.2.8.RELEASE</com.alibaba.cloud.version> <com.cloud.version>Hoxton.SR12</com.cloud.version> <com.dubbo.version>2.2.7.RELEASE</com.dubbo.version> <dependencyManagem…

SQL-DML增删改

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

Zynq 电源

ZYNQ芯片的电源分PS系统部分和PL逻辑部分&#xff0c;两部分的电源分别是独立工作。PS系统部分的电源和PL逻辑部分的电源都有上电顺序&#xff0c;不正常的上电顺序可能会导致ARM系统和FPGA系统无法正常工作。 PS部分的电源有VCCPINT、VCCPAUX、VCCPLL和PS VCCO。 VCCPINT为PS内…

thinkphp美容SPA管理系统源码带文字安装教程

thinkphp美容SPA管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 基于thinkphp3.23B-JUI1.2开发&#xff0c;权限运用了Auth类认证&#xff0c;权限可以细分到每个功能&#xff0c; 增删改查功能一应俱全&#xff0c;整合了…