QT实现校园导航

导航是地图类项目实战中经常会遇到了。看上去貌似没头绪,其实是有模板遵循的。我们直接根据图看代码。

QT实现校园导航_sed_02

QT实现校园导航_i++_03

QT实现校园导航_sed_04

//MainWidget.h#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "mapwidget.h"
#include <QToolButton>
#include <QGraphicsLineItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QLabel>
#include <QComboBox>
#include <QSpinBox>
#include <QTextEdit>
#include <QPainter>
#include <QVector>class MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = 0);~MainWindow();void createToolBar();void paintEvent (QPaintEvent *);void setStart(int X, int Y);void setEnd(int X, int Y);void setNextPos (int index);void initScene();
public slots:void setStartStation();void setEndStation();void FindPath();void Clear();
private:MapWidget *mapWidget;QLabel *startLabel;QLabel *endLabel;QComboBox *startComboBox;QComboBox *endComboBox;QToolButton *findPathBtn;QToolButton *clearBtn;QGraphicsScene *scene;QGraphicsView *view;int startX, startY, endX, endY;QVector<int> nextPath;struct ArcCell{  //弧信息int adj;     //对无权图有1,0表示是否相邻,对带权图,则为权值类型//    string info; //该弧的相关信息};//内部类static const int MAX_VERTEX_NUM = 31;static const int INF = 999999;struct MGraph{QVector<int> vexs;                                    //顶点集合//临接矩阵ArcCell arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];int vexnum;                                           //顶点数int arcnum;                                           //边数//    int kind;                                           //图的类型};class DijkstraFindPath{public:DijkstraFindPath();MGraph mgraph;void CreateGraph();
//        void ShortestPath(int v0, PathMatrix &path, ShortPathTable &DP, int prev[]);int prev[MAX_VERTEX_NUM];  //最短路上的前驱顶点int d[MAX_VERTEX_NUM];     //表示边e = (u,v)的权值(不存在时为INF,不过d[i][i]=0)bool used[MAX_VERTEX_NUM]; //已经使用过的图void dijkstra(int startPos);      //求从起点startPos出发到各个顶点的最短距离QVector<int> get_Path(int endPos);//到顶点endPos的最短路};DijkstraFindPath *dj;
};#endif // MAINWINDOW_H

//MainWidget.cpp
//最短路径算法,和界面的实现#include "mainwindow.h"
#include <qdebug.h>
#include <QToolBar>
#include <QtAlgorithms>
#include <iostream>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
//    mapWidget = new MapWidget;
//    painter = new QPainter();dj = new MainWindow::DijkstraFindPath();dj->CreateGraph ();scene = new QGraphicsScene;scene->setSceneRect (-100, -100, 700, 700);initScene();view = new QGraphicsView;view->setScene (scene);view->setMinimumSize (800, 800);view->show ();setCentralWidget (view);createToolBar ();  //实现一个工具栏
//    setCentralWidget (mapWidget);
//    setMinimumSize (600, 400);  //设置最小尺寸
}
MainWindow::DijkstraFindPath::DijkstraFindPath()
{mgraph.vexnum = 31;                      //初始化点数目for (int i = 0; i < mgraph.vexnum; i++) //初始化点编号mgraph.vexs.push_back (i);mgraph.arcnum = 80;                     //暂定for (int i = 0; i < mgraph.vexnum; i++) {for (int j = 0; j < mgraph.vexnum; j++) {if (i == j)mgraph.arcs[i][j].adj = 0;elsemgraph.arcs[i][j].adj = INF;//            mgraph.arcs[i][j].info = "";}}
}
void MainWindow::DijkstraFindPath::CreateGraph ()
{mgraph.arcs[0][1].adj = mgraph.arcs[1][0].adj = 45;    //6 - 5mgraph.arcs[0][6].adj = mgraph.arcs[6][0].adj = 165;   //6 - 10mgraph.arcs[1][2].adj = mgraph.arcs[2][1].adj = 45;    //5 - 4mgraph.arcs[2][3].adj = mgraph.arcs[3][2].adj = 45;    //4 - 3mgraph.arcs[3][4].adj = mgraph.arcs[4][3].adj = 45;    //3 - 2mgraph.arcs[3][15].adj = mgraph.arcs[15][3].adj = 24;  //3 - 22mgraph.arcs[4][5].adj = mgraph.arcs[5][4].adj = 45;    //2 - 1mgraph.arcs[13][15].adj = mgraph.arcs[15][13].adj = 85;//23 - 22mgraph.arcs[0][13].adj = mgraph.arcs[13][0].adj = 55;  //6 - 23mgraph.arcs[13][2].adj = mgraph.arcs[2][13].adj = 50;  //23 - 4mgraph.arcs[5][11].adj = mgraph.arcs[11][5].adj = 65;  //1 - 一食堂mgraph.arcs[11][12].adj = mgraph.arcs[12][11].adj = 10;//一食堂-操场mgraph.arcs[11][27].adj = mgraph.arcs[27][11].adj = 85;//一食堂-祁通1mgraph.arcs[27][28].adj = mgraph.arcs[28][27].adj = 85;//祁通1-祁通2(路口)mgraph.arcs[5][29].adj = mgraph.arcs[29][5].adj = 87;  //一食堂-岔路口mgraph.arcs[29][9].adj = mgraph.arcs[9][29].adj = 80;  //岔路-7mgraph.arcs[29][11].adj = mgraph.arcs[11][29].adj = 60;//一食堂到岔路(通向7号楼的)mgraph.arcs[29][30].adj = mgraph.arcs[30][29].adj = 32;//岔路-祁通大道mgraph.arcs[30][10].adj = mgraph.arcs[10][30].adj = 90;//祁通大道-图书馆mgraph.arcs[30][28].adj = mgraph.arcs[28][30].adj = 80;//祁通大道-祁通2mgraph.arcs[28][26].adj = mgraph.arcs[26][28].adj = 15;//祁通2-方肇周mgraph.arcs[25][27].adj = mgraph.arcs[27][25].adj = 273;    //西大门-祁通1mgraph.arcs[27][28].adj = mgraph.arcs[28][27].adj = 184;//祁通1-祁通2
//        mgraph.arcs[25][12].adj = mgraph.arcs[12][25].adj = 108; //西大门-西操mgraph.arcs[5][12].adj = mgraph.arcs[12][5].adj = 70;  //1 - 操场mgraph.arcs[6][7].adj = mgraph.arcs[7][6].adj = 45;    //10 - 9mgraph.arcs[7][8].adj = mgraph.arcs[8][7].adj = 45;    //9 - 8mgraph.arcs[8][9].adj = mgraph.arcs[9][8].adj = 45;    //8 - 7mgraph.arcs[9][10].adj = mgraph.arcs[10][9].adj = 150; //7 - 图书馆mgraph.arcs[6][14].adj = mgraph.arcs[14][6].adj = 140; //10 - 13mgraph.arcs[14][16].adj = mgraph.arcs[16][14].adj = 39;//13 - 12mgraph.arcs[14][17].adj = mgraph.arcs[17][14].adj = 39;//13 - 16mgraph.arcs[16][18].adj = mgraph.arcs[18][16].adj = 39;//12 - 15mgraph.arcs[17][18].adj = mgraph.arcs[18][17].adj = 39;//16 - 15mgraph.arcs[18][19].adj = mgraph.arcs[19][18].adj = 39;//15 - 14mgraph.arcs[17][20].adj = mgraph.arcs[20][17].adj = 137;//16 - 19mgraph.arcs[20][21].adj = mgraph.arcs[21][20].adj = 39; //19 - 18mgraph.arcs[21][22].adj = mgraph.arcs[22][21].adj = 39; //18 - 17mgraph.arcs[19][22].adj = mgraph.arcs[22][19].adj = 130;//14 - 17mgraph.arcs[22][23].adj = mgraph.arcs[23][22].adj = 53; //17 - 二超mgraph.arcs[23][24].adj = mgraph.arcs[24][23].adj = 5;  //二超 - 二食堂mgraph.arcs[24][10].adj = mgraph.arcs[10][24].adj = 260;//二食堂-图书馆//以下处理细节mgraph.arcnum = 80;
}
void MainWindow::DijkstraFindPath::dijkstra (int startPos)
{for (int i = 0; i < mgraph.vexnum; i++) d[i] = INF;for (int i = 0; i < mgraph.vexnum; i++) used[i] = false;for (int i = 0; i < mgraph.vexnum; i++) prev[i] = -1;d[startPos] = 0;while (true) {int v = -1;for (int u = 0; u < mgraph.vexnum; u++) {if (!used[u] && (v == -1 || d[u] < d[v])) v = u;}if (v == -1) break;used[v] = true;for (int u = 0; u < mgraph.vexnum; u++) {if (d[u] > d[v] + mgraph.arcs[v][u].adj) {d[u] = d[v] + mgraph.arcs[v][u].adj;prev[u] = v;}}}
}
QVector<int> MainWindow::DijkstraFindPath::get_Path (int endPos)
{QVector<int> path;for ( ; endPos != -1; endPos = prev[endPos]) {
//        std::cout << "EndPos: " << endPos << ", ";path.push_back (endPos);}std::reverse(path.begin (), path.end ());return path;
}
void MainWindow::initScene ()
{QGraphicsPixmapItem *item =scene->addPixmap (QPixmap("NanTong.jpg"));
//    item->setFlag (QGraphicsItem::ItemIsMovable);item->setPos (-500, -420);
}
MainWindow::~MainWindow()
{
}
void MainWindow::createToolBar ()
{QToolBar *toolBar = addToolBar ("Tool");startLabel = new QLabel(tr("起点: "));startComboBox = new QComboBox;startComboBox->addItem (tr("公寓6号楼"));  //0startComboBox->addItem (tr("公寓5号楼"));  //1startComboBox->addItem (tr("公寓4号楼"));  //2startComboBox->addItem (tr("公寓3号楼"));  //3startComboBox->addItem (tr("公寓2号楼"));  //4startComboBox->addItem (tr("公寓1号楼"));  //5startComboBox->addItem (tr("公寓10号楼")); //6startComboBox->addItem (tr("公寓9号楼"));  //7startComboBox->addItem (tr("公寓8号楼"));  //8startComboBox->addItem (tr("公寓7号楼"));  //9startComboBox->addItem (tr("图书馆"));     //10startComboBox->addItem (tr("一食堂")); startComboBox->addItem (tr("西操场"));  //11 12startComboBox->addItem (tr("公寓23号楼")); startComboBox->addItem (tr("公寓13号楼")); //13 14startComboBox->addItem (tr("公寓22号楼")); startComboBox->addItem (tr("公寓12号楼")); //15 16startComboBox->addItem (tr("公寓楼16")); startComboBox->addItem (tr("公寓楼15"));     //17 18startComboBox->addItem (tr("公寓楼14"));  startComboBox->addItem (tr("公寓楼19"));    //19 20startComboBox->addItem (tr("公寓楼18")); startComboBox->addItem (tr("公寓楼17"));     //21 22startComboBox->addItem (tr("二超")); startComboBox->addItem (tr("二食堂"));           //23 24startComboBox->addItem (tr("西大门")); startComboBox->addItem (tr("方肇周教学楼"));    //25 26endLabel = new QLabel(tr("\t终点: "));endComboBox = new QComboBox;endComboBox->addItem (tr("公寓6号楼"));endComboBox->addItem (tr("公寓5号楼"));endComboBox->addItem (tr("公寓4号楼"));endComboBox->addItem (tr("公寓3号楼"));endComboBox->addItem (tr("公寓2号楼"));endComboBox->addItem (tr("公寓1号楼"));endComboBox->addItem (tr("公寓10号楼"));endComboBox->addItem (tr("公寓9号楼"));endComboBox->addItem (tr("公寓8号楼"));endComboBox->addItem (tr("公寓7号楼"));endComboBox->addItem (tr("图书馆"));endComboBox->addItem (tr("一食堂"));    endComboBox->addItem (tr("西操场"));endComboBox->addItem (tr("公寓23号楼"));endComboBox->addItem (tr("公寓13号楼"));endComboBox->addItem (tr("公寓22号楼"));endComboBox->addItem (tr("公寓12号楼"));endComboBox->addItem (tr("公寓楼16"));  endComboBox->addItem (tr("公寓楼15"));endComboBox->addItem (tr("公寓楼14"));  endComboBox->addItem (tr("公寓楼19"));endComboBox->addItem (tr("公寓楼18"));  endComboBox->addItem (tr("公寓楼17"));endComboBox->addItem (tr("二超"));      endComboBox->addItem (tr("二食堂"));endComboBox->addItem (tr("西大门"));    endComboBox->addItem (tr("方肇周教学楼"));connect (startComboBox, SIGNAL(activated(int)), this, SLOT(setStartStation()));connect (endComboBox, SIGNAL(activated(int)), this, SLOT(setEndStation()));findPathBtn = new QToolButton;findPathBtn->setText (tr("\t\t绘制最短路径"));connect (findPathBtn, SIGNAL(clicked(bool)), this, SLOT(FindPath()));clearBtn = new QToolButton;clearBtn->setText (tr("\t\t清除"));connect (clearBtn, SIGNAL(clicked(bool)), this, SLOT(Clear()));toolBar->addWidget (startLabel);toolBar->addWidget (startComboBox);toolBar->addWidget (endLabel);toolBar->addWidget (endComboBox);toolBar->addWidget (findPathBtn);toolBar->addWidget (clearBtn);
}
void MainWindow::setStart(int X, int Y) {startX = X; startY = Y;
//    qDebug() << X << ", " << Y;
}
void MainWindow::setEnd (int X, int Y)
{endX = X; endY = Y;
}
void MainWindow::setStartStation ()
{switch (startComboBox->currentIndex ()) {case 0:setStart(-660, -534); break;case 1:setStart (-673, -490); break;case 2:setStart (-682, -446); break;case 3:setStart (-690, -400); break;case 4:setStart (-701, -355); break;case 5:setStart (-711, -310); break;case 6:setStart (-457, -555); break;case 7:setStart (-449, -485); break;case 8:setStart(-446, -432); break;case 9:setStart (-451, -400); break;case 10:setStart (-347, -353); break;case 11:setStart (-720, -247); break;case 12:setStart (-789, -252); break;case 13:setStart (-721, -517); break;case 14:setStart (-271, -540); break;case 15:setStart (-721, -439); break;case 16:setStart (-274, -495); break;case 17:setStart (-180, -552); break;case 18:setStart (-178, -508); break;case 19:setStart (-179, -456); break;case 20:setStart (-73, -549); break;case 21:setStart (-56, -500); break;case 22:setStart (-59, -448); break;case 23:setStart (-94, -381); break;case 24:setStart (-69, -351); break;case 25:setStart (-1070, -92); break;case 26:setStart (-438, -125); break;case 27:setStart (-721, -119); break;case 28:setStart (-550, -122); break;case 29:setStart (-555, -263); break;case 30:setStart (-498, -235); break;default:break;}
}
void MainWindow::setEndStation ()
{switch (endComboBox->currentIndex ()) {case 0:setEnd(-660, -534); break;case 1:setEnd (-673, -490); break;case 2:setEnd (-682, -446); break;case 3:setEnd (-690, -400); break;case 4:setEnd (-701, -355); break;case 5:setEnd (-711, -310); break;case 6:setEnd (-457, -555); break;case 7:setEnd (-449, -485); break;case 8:setEnd (-446, -432); break;case 9:setEnd (-451, -400); break;case 10:setEnd (-347, -353); break;case 11:setEnd (-720, -247); break;case 12:setEnd (-789, -252); break;case 13:setEnd (-721, -517); break;case 14:setEnd (-271, -540); break;case 15:setEnd (-721, -439); break;case 16:setEnd (-274, -495); break;case 17:setEnd (-180, -552); break;case 18:setEnd (-178, -508); break;case 19:setEnd (-179, -456); break;case 20:setEnd (-73, -549); break;case 21:setEnd (-56, -500); break;case 22:setEnd (-59, -448); break;case 23:setEnd (-94, -381); break;case 24:setEnd (-69, -351); break;case 25:setEnd (-1070, -92); break;case 26:setEnd (-438, -125); break;case 27:setEnd (-721, -119); break;case 28:setEnd (-550, -122); break;case 29:setEnd (-555, -263); break;case 30:setEnd (-498, -235); break;default:break;}
}
void MainWindow::setNextPos (int index)
{switch (index) {case 0:setEnd(-660, -534); break;case 1:setEnd (-673, -490); break;case 2:setEnd (-682, -446); break;case 3:setEnd (-690, -400); break;case 4:setEnd (-701, -355); break;case 5:setEnd (-711, -310); break;case 6:setEnd (-457, -555); break;case 7:setEnd (-449, -485); break;case 8:setEnd (-446, -432); break;case 9:setEnd (-451, -400); break;case 10:setEnd (-347, -353); break;case 11:setEnd (-720, -247); break;case 12:setEnd (-789, -252); break;case 13:setEnd (-721, -517); break;case 14:setEnd (-271, -540); break;case 15:setEnd (-721, -439); break;case 16:setEnd (-274, -495); break;case 17:setEnd (-180, -552); break;case 18:setEnd (-178, -508); break;case 19:setEnd (-179, -456); break;case 20:setEnd (-73, -549); break;case 21:setEnd (-56, -500); break;case 22:setEnd (-59, -448); break;case 23:setEnd (-94, -381); break;case 24:setEnd (-69, -351); break;case 25:setEnd (-1070, -92); break;case 26:setEnd (-438, -125); break;case 27:setEnd (-721, -119); break;case 28:setEnd (-550, -122); break;case 29:setEnd (-555, -263); break;case 30:setEnd (-498, -235); break;default:break;}
}
void MainWindow::FindPath ()
{//Demo 在图片上绘线 在原有基础上 (+700, +440);QVector<QPoint> v;dj->dijkstra (startComboBox->currentIndex ());//设置下一处的终点nextPath = dj->get_Path (endComboBox->currentIndex ());//准备绘制Clear ();//将路线绘制下来QGraphicsPathItem *item = new QGraphicsPathItem();QPen pen;pen.setWidth (4);pen.setColor (Qt::red);item->setPen (pen);item->setFlag (QGraphicsItem::ItemIsPanel);
//    qDebug() << startX << " " << startY << " " << endX << " " << endY;
//    qDebug() << "Hello World !";//设置起点
//    v << QPoint(startX + 700, startY + 440);for (int i = 1; i < nextPath.size (); i++) {qDebug() << nextPath[i] << " , ";}scene->addItem (item);QPainterPath pa;               //path
//    setNextPos (nextPath[1]);
//    item->setLine (startX + 700, startY + 440, endX + 700, endY + 440);pa.moveTo (startX + 700, startY + 440);for (int i = 1; i < nextPath.size() ; i++) {setNextPos (nextPath[i]);pa.lineTo (endX + 700, endY + 440);}item->setPath (pa);
}
void MainWindow::Clear ()
{QList<QGraphicsItem*> listItem = scene->items ();while (!listItem.empty ()){scene->removeItem (listItem.at (0));listItem.removeAt (0);}QGraphicsPixmapItem *item =scene->addPixmap (QPixmap("NanTong.jpg"));
//    item->setFlag (QGraphicsItem::ItemIsMovable);item->setPos (-500, -420);
}
void MainWindow::paintEvent (QPaintEvent *)
{}

下面是main主函数调用。

//Main.cpp
#include "mainwindow.h"
#include "mapwidget.h"
#include <QApplication>
#include <QFont>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);QFont font("ARPL KaitiM GB", 12);font.setBold (true);a.setFont (font);qDebug() << "Run............";MainWindow w;w.show ();return a.exec();
}

end

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

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

相关文章

C++在vscode中的code runner配置/环境配置

C在vscode中快捷运行&#xff08;code runner&#xff09; 一、配置tasks.json 在vscode中创建文件夹或打开文件夹&#xff0c;会发现文件夹下多了一个.vscode文件夹&#xff0c;在该文件夹下创建tasks.json文件&#xff0c;并添加一下内容 {"version": "2.0…

SCRM呼叫中心高保真Axure原型 源文件分享

在数字化时代&#xff0c;客户关系管理&#xff08;CRM&#xff09;对于企业的成功至关重要。SCRM呼叫中心后台作为一款专为CRM设计的软件原型&#xff0c;致力于为企业提供高效、智能的客户沟通解决方案。本文将详细介绍该产品的核心功能及其对企业提升客户满意度和销售业绩的…

前端/node.js锁定依赖版本、锁定依赖的依赖的版本

一、知识前提 version&#xff1a;必须依赖某个具体的版本。如&#xff1a;vue的3.2.0&#xff0c;表示必须安装3.2.0版本。>version&#xff1a;必须大于某个版本。>version&#xff1a;大于或等于某个版本。<version&#xff1a;必须小于某个版本。<version&…

Backward Chaining(后向链推理)

这张图介绍了 Backward Chaining&#xff08;后向链推理&#xff09; 的基本概念和步骤。 后向链推理的基本思路&#xff1a; 后向链推理的目标是从查询目标 ( q ) 开始&#xff0c;向后推导前提条件&#xff0c;验证该查询是否成立。 证明目标 ( q ) 的步骤&#xff1a; 检…

MySQL中 turncate、drop和delete的区别

MySQL中 turncate、drop和delete区别 turncate 执行速度快&#xff0c;删除所有数据&#xff0c;但是保留表结构不记录日志事务不安全&#xff0c;不能回滚可重置自增主键计数器 drop 执行速度较快&#xff0c;删除整张表数据和结构不记录日志事务不安全&#xff0c;不能回…

源码编译llama.cpp for windows on arm

源码编译llama.cpp for windows on arm 这里有编译好的&#xff0c;直接下载使用 https://github.com/turingevo/llama.cpp-build/releases 1 先编译openblas for windows on arm 查看我的文章 《源码编译 openblas for windows on arm》 2 启用OpenBlas加速 上一步openb…

基于yolov8、yolov5的鸟类检测系统(含UI界面、数据集、训练好的模型、Python代码)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…

FastApi SQLAlchemy SQLite

FastApi fastapi是一个用于构建API 的现代、快速&#xff08;高性能&#xff09;的web框架&#xff0c;它是建立在Starlette和Pydantic基础上的。 Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库&#xff0c;Starlette是一种轻量级的ASGI框架/工具包&…

流程图 LogicFlow

流程图 LogicFlow 官方文档&#xff1a;https://site.logic-flow.cn/tutorial/get-started <script setup> import { onMounted, ref } from vue import { forEach, map, has } from lodash-es import LogicFlow, { ElementState, LogicFlowUtil } from logicflow/core …

Vue Data UI——Vue 3 数据可视化组件库

文章目录 1、Vue Data UI2、核心特点2.1.Vue 3 的深度集成2.2 丰富的可视化组件2.3 灵活的定制性2.4 易于集成2.5 文件导出功能2.6 多主题支持3、如何在项目中使用 Vue Data UI?3.1 安装 Vue Data UI3.2 全局注册组件3.3 局部引入组件3.4 使用通用组件3.5 TypeScript 集成4、总…

新年好——Dijkstra+Permutation

题目 代码 #include <bits/stdc.h> using namespace std; #define x first #define y second typedef pair<int, int> PII; const int N 5e410, M 2e510; const int inf 0x3f3f3f3f; int n, m; int a[6]; int h[N], e[M], ne[M], idx, w[M]; int dist[6][N];…

倾斜的角标 android倾斜角标实现

android倾斜角标实现_android 图片角标如何制作-CSDN博客 import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint;…

企业资产安全之数据防泄密要领

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据价值的增加&#xff0c;数据泄露的风险也随之上升。从内部员工的无意泄露到外部黑客的恶意攻击&#xff0c;企业数据安全面临着前所未有的挑战。SDC沙盒数据防泄密解决方案&#xff0c;正是为…

几种常用大模型工具生成基于hi3861的OpenHarmony代码的尝试

引言 最近在上智能物联网的课程&#xff0c;讲授基于hi3861的OpenHarmony编程&#xff0c;所以尝试一下使用大模型工具生成相关的代码&#xff0c;看看效果如何。提问的方式比较简单粗暴&#xff1a; 在OpenHarmony的hi3861平台上&#xff0c;如何编程访问https的网站&#xf…

进程和线程

目录 进程 线程 进程和线程的区别 进程 什么是进程&#xff1f; 每个应用程序运行在操作系统上时&#xff0c; 操作系统会提供一种抽象&#xff0c;好像系统上只有这个程序在运行&#xff0c;所有的硬件资源都被这个程序在使用。 这种假象是通过抽象了一个进程的概念来完成…

什么是编译器?

我们平时所说的程序&#xff0c;是指双击后就可以直接运行的程序&#xff0c;这样的程序被称为可执行程序&#xff08;Executable Program&#xff09;。在 Windows 下&#xff0c;可执行程序的后缀有 .exe 和 .com&#xff08;其中 .exe 比较常见&#xff09;&#xff1b;在类…

决战Linux操作系统

前言&#xff1a; 你是否也曾经为Linux所困扰过&#xff0c;在网上找的资料零零散散&#xff0c;是否学完Linux后还是懵懵懂懂&#xff0c;别怕&#xff0c;这篇博客是博主精心为你准备的&#xff0c;现在&#xff0c;就让我们一起来走进Linux的世界&#xff0c;决战Linux&…

C语言 sizeof 的介绍,以及sizeof计算数组名、 数组首地址、数组的元素之间的区别

一、sizeof 介绍 sizeof 是 C 语言中的一个运算符&#xff0c;用于计算数据类型或变量在内存中占用的字节数。用于计算数据类型或变量所占的内存大小&#xff0c;以字节为单位。它可以在编译时计算其操作数的大小&#xff0c;并返回一个 size_t 类型的值。它可以帮助了解不同类…

WebGL 小白入门学习

1. WebGL是什么&#xff1f; WebGL&#xff08;Web Graphics Library&#xff09;是一种JavaScript API&#xff0c;它允许你在不需要安装任何额外插件的情况下&#xff0c;直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元&#xff08;GPU&#xff09;来…

统信桌面专业版【手动分区安装UOS系统】介绍

统信桌面专业版【手动分区安装UOS系统】介绍 全文导读功能概述准备环境安装步骤注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 全文导读 本文旨在详细介绍在安装UOS系统时采用手动分区的方法。虽然全盘安装通常是推荐的安装方式&…