QT集成IntelRealSense双目摄像头2,集成OpenGL
上一篇文章写了如何把IntelRealSense摄像头的SDK集成到QT项目,并成功采集数据,在没有用OpenCV的情况下完成色彩数据,以及深度数据的显示。
具体地址:https://blog.csdn.net/qujia121qu/article/details/144734163
本次主要写如何把深度数据和色彩数据,融合显示为3D数据。既然要显示为3D数据,那么肯定是要用OpenGL。所以第一步,就是要项目引入opengl。
第一步:引入OpenGL。
引入OpenGL需要QT+=opengl,然后加载opengl的lib和glu的lib文件。代码如下。引入成功以后,#include <GL/gl.h>不会报错。
win32:LIBS += -lOpengl32\
-lglu32
unix:LIBS += -lglut -lGLU
第二步:创建一个用于显示3D图像的Widget
因为要显示3D,所以这个Widget要继承自QGLWidget或者QOpenGLWidget。这两个差不多。头文件和CPP见下面代码,这个是最基本的一个QGLWidget框架,适合绘制平面图形,建议收藏。
#include <QObject>
#include <QGLWidget>
#include <GL/gl.h>
#include <GL/glu.h>
class GLWidget : public QGLWidget
{Q_OBJECT
public:GLWidget();static GLWidget* getInstance(); //单例模式
protected:void resizeGL(int w, int h) override; //窗口大小改变的时候,gl重新初始化void initializeGL() override; //初始化glvoid paintGL() override; //核心绘制
};#endif // GLWIGET_H
#include "glwidget.h"GLWidget::GLWidget()
{}/*** @brief GLWidget::getInstance 单例模式* @return*/
GLWidget* GLWidget::getInstance(){GLWidget* ins=NULL;if(ins==NULL)ins=new GLWidget();return ins;
}
/*** @brief GLWidget::initializeGL 初始化opengl。可以步写*/
void GLWidget::initializeGL(){}
/*** @brief GLWidget::resizeGL 窗口大小改变* @param w* @param h*/
void GLWidget::resizeGL(int w, int h){glViewport(0,0,w,h); //重新适应窗口大小}
/*** @brief GLWidget::paintGL 绘制核心方法*/
void GLWidget::paintGL(){glClearColor(0,0,0,0); //背景色glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//清除上一次的缓存glLoadIdentity(); //加载单位矩阵glColor3f (1, 0, 1.0); //画笔颜色glRectf(-0.5, -0.5, 0.5, 0.5); // 绘制一个边长为1的矩形
}
以上代码绘制出来一个矩形,如下图。opengl窗口的宽高都是1,所以0.5,就是宽高的一半。
目前只是加载了opengl,但是绘制是依然是平面图形。要绘制3D图像,就需要设置投影矩阵,以及相机。大致的意思,就是设置相机焦距,远距离,近距离,视角,相机位置等。主要是两个函数
gluPerspective(视角角度,长宽比,近距离,远距离) gluLookAt(相机x,相机y,相机z, 目标x,目标y,目标z, 相机方向x,相机方向y,相机方向z)
第三步:设置相机和投影矩阵
如下,就是在resizeGL里面增加了几行代码,这个设置完,就不用改了。在paintGL里面增加了一个gluLookAt,通过调整参数,可以改变相机位置。
/*** @brief GLWidget::resizeGL 窗口大小改变* @param w* @param h*/
void GLWidget::resizeGL(int w, int h){glViewport(0,0,w,h); //重新适应窗口大小glMatrixMode (GL_PROJECTION);glLoadIdentity ();gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1, 2000.0); //设置相机投影参数glMatrixMode(GL_MODELVIEW);glLoadIdentity();}
/*** @brief GLWidget::paintGL 绘制核心方法*/
void GLWidget::paintGL(){glClearColor(0,0,0,0); //背景色glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//清除上一次的缓存glLoadIdentity(); //加载单位矩阵gluLookAt(0,0,100, 0,0,0, 0.0,1.0,0); //设置相机glColor3f (1, 0, 1.0); //画笔颜色glRectf(-0.5, -0.5, 0.5, 0.5); // 绘制一个边长为1的矩形
}
第四步:鼠标跟随
实际上就是控制相机位置,通过改变相机位置,达到鼠标控制3D画面的效果。为了实现效果,定义一个水平面的角度degZ,一个垂直面角度degY,一个相机距离中心点的半径R,实际上就是定义极坐标,通过极坐标转换为三维坐标。鼠标滚轮改变半径R,坐标左右移动改变水平面角度degZ,鼠标上下移动Y,改变垂直面角度。
以下是一个具备基本功能的GLWidget类代码,强烈建议收藏
#ifndef GLWIGET_H
#define GLWIGET_H#include <QObject>
#include <QGLWidget>
#include <GL/gl.h>
#include <GL/glu.h>
#include <QMouseEvent>
#include <QWheelEvent>
class GLWidget : public QGLWidget
{Q_OBJECT
public:GLWidget();static GLWidget* getInstance(); //单例模式
protected:void resizeGL(int w, int h) override; //窗口大小改变的时候,gl重新初始化void initializeGL() override; //初始化glvoid paintGL() override; //核心绘制void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;void wheelEvent(QWheelEvent *event) override;
private:double r;//相机距离中心的的半径double degZ;//在水平面的角度double degY;//在垂直面的角度double camx,camy,camz;//相机位置void refresh();//重新绘制QPoint old;//鼠标原始位置bool isPressed;//是否按下
};#endif // GLWIGET_H
#include "glwidget.h"
#include <qmath.h>
#include <QDebug>
GLWidget::GLWidget()
{r=100;//默认距离degY=degZ=0;camz=r*qCos(degZ);camx=r*qSin(degZ);camy=r*qSin(degY);
}/*** @brief GLWidget::getInstance 单例模式* @return*/
GLWidget* GLWidget::getInstance(){GLWidget* ins=NULL;if(ins==NULL)ins=new GLWidget();return ins;
}
/*** @brief GLWidget::initializeGL 初始化opengl。可以步写*/
void GLWidget::initializeGL(){}
/*** @brief GLWidget::resizeGL 窗口大小改变* @param w* @param h*/
void GLWidget::resizeGL(int w, int h){glViewport(0,0,w,h); //重新适应窗口大小glMatrixMode (GL_PROJECTION);glLoadIdentity ();gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1, 2000.0); //设置相机投影参数glMatrixMode(GL_MODELVIEW);glLoadIdentity();}
/*** @brief GLWidget::paintGL 绘制核心方法*/
void GLWidget::paintGL(){glClearColor(0,0,0,0); //背景色glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//清除上一次的缓存glLoadIdentity(); //加载单位矩阵gluLookAt(camx,camy,camz, 0,0,0, 0.0,1.0,0); //设置相机glColor3f (1, 0, 1.0); //画笔颜色glRectf(-50, -50, 50, 50); // 绘制一个边长为50的矩形
}
/*** @brief GLWidget::refresh 重新计算相机位置*/
void GLWidget::refresh(){camz=r*qCos(degZ);camx=r*qSin(degZ);camy=r*qSin(degY);this->update();
}void GLWidget::wheelEvent(QWheelEvent *event){qDebug()<<r<<event->delta();r+=event->delta()/20;if(r<20)r=20;if(r>1800)r=1800;refresh();
}
void GLWidget::mouseMoveEvent(QMouseEvent *event){if(isPressed){QPoint p=event->pos();degZ+=(p.x()-old.x())/5.0;degY+=(p.y()-old.y())/5.0;old=p;refresh();}
}void GLWidget::mousePressEvent(QMouseEvent *event){if(event->button()==Qt::LeftButton){isPressed=true;old=event->pos();}
}
void GLWidget::mouseReleaseEvent(QMouseEvent *event){if(event->button()==Qt::LeftButton){isPressed=false;}
}
运行效果,可以通过鼠标来控制相机,达到3D效果
时间关系,就一篇就水到这里。周一再来一篇,写双面相机数据,如何显示到GLWidget。
相关文章:
QT集成IntelRealSense双目摄像头2,集成OpenGL
上一篇文章写了如何把IntelRealSense摄像头的SDK集成到QT项目,并成功采集数据,在没有用OpenCV的情况下完成色彩数据,以及深度数据的显示。 具体地址:https://blog.csdn.net/qujia121qu/article/details/144734163 本次主要写如何…...
MySQL数据库——索引结构之B+树
本文先介绍数据结构中树的演化过程,之后介绍为什么MySQL数据库选择了B树作为索引结构。 文章目录 树的演化为什么其他树结构不行?为什么不使用二叉查找树(BST)?为什么不使用平衡二叉树(AVL树)&a…...
基于SpringBoot+Vue的旅游推荐系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
HTML——20 自定义属性
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>自定义属性</title></head><body><a href"https://ai.m.taobao.com" 自定义属性"属性值">淘宝网</a><a href"h…...
Java Day1回顾简介-----变量命名规则
Java 简介、开发环境配置 菜鸟教程 编译运行 javac HelloWorld.java java HelloWorld Hello World public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World");} }JAVA基础语法 类、对象、方法、实例、变量 对象&a…...
【Rust自学】8.2. Vector + Enum的应用
8.2.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构,这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的,这也意味着这些集合的数据大小无需在编…...
机器算法之逻辑回归(Logistic Regression)详解
一、什么是逻辑回归? 逻辑回归并不是传统意义上的回归分析,而是一种用于处理二分类问题的线性模型。它通过计算样本属于某一类别的概率来进行分类,尽管名字中有“回归”二字,但它实际上是一种分类算法。简单来说,逻辑…...
UE5材质节点VertexNormalWs/PixelNormalWS
VertexNormalWs顶点法线方向,此节点可以做物体上积雪、青苔等效果 PixelNormalWS像素法线方向...
NPM组件包 vant部分版本内嵌挖矿代码
Vant 是一个轻量、可定制的移动端组件库,于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本。 Vant 2 版本:https://vant-ui.github.io/vant/v2/#/zh-CN/home V…...
通过 Ansys Electronics Desktop 中的高级仿真优化 IC 设计
半导体行业继续通过日益复杂的集成电路 (IC) 设计突破技术界限。随着工艺节点缩小和电路密度达到前所未有的水平,电磁效应对设备性能和可靠性变得越来越重要。现代 IC 设计面临着来自复杂的布局相关耦合机制、信号完整性问题和功率分布问题的挑战,这些问…...
【Android】application@label 属性属性冲突报错
错误记录 What went wrong: Execution failed for task :app:processDebugMainManifest. > Manifest merger failed : Attribute applicationlabel value(string/app_name) from AndroidManifest.xml:8:9-41is also present at [:abslibrary] AndroidManifest.xml:25:9-47 v…...
如何恢复永久删除的PPT文件?查看数据恢复教程!
可以恢复永久删除的PPT文件吗? Microsoft PowerPoint应用程序是一种应用广泛的演示程序,在人们的日常生活中经常使用。商人、官员、学生等在学习和工作中会使用PowerPoint做报告和演示。PowerPoint在人们的学习和工作生活中占主导地位,每天都…...
露营小程序搭建有哪些步骤?小程序里面可以找个露营搭子
露营不仅仅是走进大自然的旅程,它也成为了一种社交和体验式的活动。随着小程序的普及,露营活动也越来越多地开始在线上开展。通过搭建一个露营小程序,商家不仅可以为用户提供更多的露营选择,还可以帮助他们找到合适的露营搭子。那…...
python小项目:使用多剪贴板自动回复消息
使用多剪贴板自动回复消息 一、效果展示二、实现步骤2.1 编写python脚本2.2 批处理脚本2.3 运行脚本 三、用到知识3.1 sys.argv3.2 pyperclip3.2.1 主要功能3.2.2 跨平台支持3.2.3 安装方法3.2.4 基本用法3.2.5 高级用法3.2.6 注意事项 一、效果展示 说明:在windows…...
http性能测试命令ab
华子目录 使用方法常用选项示例输出解读注意事项 在 Linux系统中, ab( ApacheBench)是一个用于 测试HTTP服务器性能的 工具。它是 Apache HTTP服务器项目的 一部分,专门设计用来模拟 多个用户对 服务器发起 并发请求&am…...
C 实现植物大战僵尸(四)
C 实现植物大战僵尸(四) C 实现植物大战僵尸,完结撒花(还有个音频稍卡顿的性能问题,待有空优化解决)。目前基本的功能模块已经搭建好了,感兴趣的友友可自行尝试编写后续游戏内容 因为 C 站不能…...
GitHub Fork 和 Clone 的深度指南:操作解析与 Pull Request 完整流程20241231
GitHub Fork 和 Clone 的深度指南:操作解析与 Pull Request 完整流程 快速导航 引言Fork 与 Clone 概念对比完整开发流程Pull Request 最佳实践常见问题与解决方案最佳实践建议实战案例 引言 在开发者的协作世界中,GitHub 就像一座桥梁,连…...
hypothesis testing
p 值、t 值、显著水平值的意义 在统计学中,p 值、t 值和显著水平值 ( α (\alpha (α)是常用的概念,用于判断研究数据是否支持某个假设。以下是它们的定义、意义和相互关系。 1. p 值 定义 p 值是指在假设原假设 ( H 0 H_0 H0) 为真的前提下&#x…...
解決當前IP地址僅適用於本地網路
想要解決“當前IP地址僅適用於本地網路”其實並不困難。本篇文章將介紹其發生的原因以及如何解決。 “僅限本地網路”是什麼意思? 當IP地址為“僅限本地網路”時,意味著設備正在使用私人網路內部IP地址,但無法連接到互聯網。如果將本地IP視…...
一个最简单的ios程序(object_c)的编写
前言 如何在苹果系统MacOS创建一个简单的ios(iphone)程序,貌似非常的简单。但是,作为习惯了Windows开发的程序员来说,有时候还觉得有点麻烦,至少开始有点很不习惯。 本博文试着把这个过程展现一下ÿ…...
HTML5实现好看的新年春节元旦网站源码
HTML5实现好看的新年春节元旦网站源码 前言一、设计来源1.1 主界面1.2 新年由来界面1.3 文章详细界面1.4 登录界面1.5 注册界面1.6 新年图册界面1.7 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的新年春节元旦网站源码,春节新…...
NLP模型工程化部署
文章目录 一、理论-微服务、测试与GPU1)微服务架构2)代码测试3)GPU使用 二、实践-封装微服务,编写测试用例和脚本,并观察GPU1)微服务封装(RestFul和RPC)①RestFul接口②RPC接口 2)测试编写(unit…...
git时常混淆的操作的笔记
git时常混淆的操作的笔记 写在前面git rebase与merge的不同git am 与git apply的不同删除远端分支 写在前面 离开OS公司后,git的使用不再那么频繁。许多指令,时常忘记,这里作一点笔记。 git rebase与merge的不同 首先,这二者的…...
大模型WebUI:Gradio全解系列8——Additional Features:补充特性(上)
大模型WebUI:Gradio全解系列8——Additional Features:补充特性(上) 前言本篇摘要8. Additional Features:补充特性8.1 队列8.1.1 使用方法8.1.2 配置队列演示 8.2 输入输出流8.2.1 输出流1. 生成器yield2. 流媒体 8.2…...
vue3 Suspense组件
当等待数据的时间比开发人员希望的时间要长时在Vue3中无须自定义代码即可实现 只需要通过Suspense组件管理这一过程。 该组件除了可以给定默认加载数据后的渲染视图,还可以设置加载数据时的应急视图。 例如,在数据加载过程中,会先显示fall…...
Linux 内核调试
系列文章目录 Linux内核学习 QEMU 虚拟机 Linux 调试视频 近阶段补充知识 文章目录 系列文章目录一、WSL二、QEMU1、安装2、退出 三、构建根文件系统1、下载 BusyBox2、编译3、构建文件目录:Makefileinit 四、内核编译1、下载2、构建 五、调试1、GDB 命令调试2、VSC…...
【华为OD-E卷 - 机房布局 100分(python、java、c++、js、c)】
【华为OD-E卷 - 机房布局 100分(python、java、c、js、c)】 题目 小明正在规划一个大型数据中心机房,为了使得机柜上的机器都能正常满负荷工作,需要确保在每个机柜边上至少要有一个电箱。 为了简化题目,假设这个机房…...
Cursor小试1.生成一个网页的接口请求工具
一般开发过程中,会涉及到接口的调试,往往有时候开发的电脑不是我们自己的,没有安装一些类似postman 的接口调用工具,所以发现问题或者要测试某些接口是否正常的时候会很麻烦,而且现在网上也没有找到很好的免费的网页端接口请求的网址,所以我们使用Cursor来编写这样一个小工具, …...
免费的量化交易股票API有哪些局限性?
免费的量化交易股票 API 存在以下多方面的局限性: 功能限制 数据获取方面: 数据种类不完整:可能仅提供基本的行情数据,如开盘价、收盘价、最高价、最低价等,而深度行情数据(如买卖盘的详细挂单情况…...
leetcode之hot100---148排序链表(C++)
题目要求将一个无序的链表按照升序返回,涉及排序算法,下面对每个排序算法进行回顾 一、交换排序 1.冒泡排序 算法思想:反复比较相邻的两个元素,将它们中较大的(或较小的)元素逐步“冒泡”到数组的末尾。…...
Redis下载与安装
Redis下载与安装 注意:官网没有提供Windows版本,只有Linux版本。 GitHub下载地址: https://github.com/microsoftarchive/redis/releases 这里演示解压版的” Redis-x64-3.2.100.zip”,下载完毕后解压即可。 目录解析: 以管理员…...
TF-IDF(Term Frequency-Inverse Document Frequency)详解:原理和python实现(中英双语)
中文版 TF-IDF算法详解:理解与应用 TF-IDF(Term Frequency-Inverse Document Frequency)是信息检索与文本挖掘中常用的算法,广泛应用于搜索引擎、推荐系统以及各种文本分析领域。TF-IDF的核心思想是通过计算一个词在文档中的重要…...
论文研读:Text2Video-Zero 无需微调,仅改动<文生图模型>推理函数实现文生视频(Arxiv 2023-03-23)
论文名:Text2Video-Zero: Text-to-Image Diffusion Models are Zero-Shot Video Generators 1. 摘要 1.1 方法总结 通过潜空间插值, 实现动作连续帧。 以第一帧为锚定,替换原模型的self-attention,改为cross-attention 实现 保证图片整体场…...
.Net Core配置系统
目录 Json文件配置 读取配置原始方法 绑定读取配置 用法 传统Web.config配置的缺点为了兼容,仍然可以使用Web.config和ConifgurationManager类,但不推荐.NET中的配置系统支持丰富的配置源,包括文件(json、xml、ini等ÿ…...
互联网直播点播平台EasyDSS无人机视频推拉流技术实现工地远程监控巡检直播
在建筑行业,施工现场的安全管理和实时监控一直是项目管理中的重点。随着技术的进步,无人机工地直播技术成为了一种新兴的解决方案,它不仅能够提高施工透明度,还能够加强现场安全管理。EasyDSS作为一种先进的流媒体技术平台&#x…...
VirtualBox新版本报错 Invalid installation directory解决方案
最近需要使用到VirtualBox,但是下载最新的安装时发现如下Invalid installation directory,经过多番查找终于找到了解决问题方法,并进行了测试,现将解决办法附上 步骤一、将需要安装VirtualBox的目录下创建个目录 步骤二、使用cmd&…...
PY_11_01
前言 PY_11_01 抄就行了👻 一、代码步骤 抄就行了👻 def fact(n):if n1:return 1else:return n*fact(n-1)while True:minput(请输入一个正整数m:)if not m.isdigit() or int(m)0:print(输入错误,请重新输入!)else:mint(m)brea…...
golang syscall 三种加载DLL方式
1. syscall.MustLoadDLL() MustLoadDLL 是一种加载 DLL 的函数,它会在加载 DLL 时,如果发生错误,直接 panic。 错误处理:如果 DLL 加载失败,它会调用 panic,导致程序崩溃。dll : syscall.MustLoadDLL(&qu…...
Zabbix企业级分布式监控系统
第一章:监控概念及Zabbix部署 监控概述 对于监控系统在企业架构中不是新的技术,但却是必不可少的重要组成部分,所谓无监控,不运维! 监控系统可以帮助运维、开发、测试等人员及时的发现服务器出现的故障,…...
JetPack——Lifecycle
Lifecycle是什么? Lifecycle 是一个类,用于存储有关组件(如 activity 或 fragment)的生命周期状态的信息,并允许其他对象观测此状态 Lifeclcle解决什么问题? class GPS(private val context: Context,pr…...
本地小主机安装HomeAssistant开源智能家居平台打造个人AI管家
文章目录 前言1. 添加镜像源2. 部署HomeAssistant3. HA系统初始化配置4. HA系统添加智能设备4.1 添加已发现的设备4.2 添加HACS插件安装设备 5. 安装cpolar内网穿透5.1 配置HA公网地址 6. 配置固定公网地址 前言 大家好!今天我要向大家展示如何将一台迷你的香橙派Z…...
大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!
大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!DeepSeek-V3上线即开源;OpenAI 发布高级推理模型 o3https://mp.weixin.qq.com/s/9qU_zzIv9ibFdJZ5cTocOw?token47960959&langzh_CN 「青稞大模型Weekly」,持…...
【0379】Postgres内核 Walreceiver (libpqwalreceiver API)分析
文章目录 1. libpqwalreceiver API1.1 四个函数2. Walreceiver IPC3. Walsender IPC4. Walsender - walreceiver protocol1. libpqwalreceiver API walreceiver 中与传输相关的部分,其负责连接主服务器、接收 WAL 文件以及发送消息,是动态加载的,以避免主服务器的二进制文件…...
easybox
title: 解锁 EasyBox:智能运维的便捷之选 date: ‘2024-12-31’ category: blog tags: EasyBox智能运维效率提升自动化运维 sig: memsafety archives: ‘2024-12’ author:way_back summary: EasyBox 作为一款智能运维工具,以其简洁高效的特性ÿ…...
Prompt工程--AI开发--可置顶粘贴小工具
PROMPT 1.背景要求:我需要开发一个简单的粘贴小工具,用于方便地粘贴和管理文本内容。该工具需要具备以下功能:粘贴功能:提供一个文本框,用户可以粘贴内容。窗口置顶:支持窗口置顶功能,确保窗口…...
【AI日记】24.12.31 kaggle 比赛 2-19
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加:kaggle 比赛 Regression with an Insurance Dataset时间:9 小时 读书 书名:论婚姻与道德时间:1.5 小时 律己 工作时间:良作息&#x…...
jenkins集成工具(一)部署php项目
目录 什么是CI 、CD Jenkins集成工具 一、Jenkins介绍 二、jenkins的安装和部署 环境部署 安装jenkins 安装gitlab 配置镜像源进行安装 修改密码 安装git工具 上传测试代码 Jenkins部署php项目wordpress 发布php代码 安装插件 测试代码发布 实现发布成功发送邮件…...
ubuntu 使用samba与windows共享文件[注意权限配置]
在Ubuntu上使用Samba服务与Windows系统共享文件,需要正确配置Samba服务以及相应的权限。以下是详细的步骤: 安装Samba 首先,确保你的Ubuntu系统上安装了Samba服务。 sudo apt update sudo apt install samba配置Samba 安装完成后,…...
【GridView渐进全解】第四部分GridView分页进阶
目录 一、启用分页 二、修改GridView分页模板 1.进入控件模板修改视图: 2.进入页码模板(PagerTemplate)视图 3.添加导航按钮控件 4.修改导航控件属性 三、输入页号跳转 1.进入页码模板视图 2.添加文本框及按钮控件 3.编写代码 【接…...
K8s集群平滑升级(Smooth Upgrade of K8S Cluster)
简介: Kubernetes (简称K8s)是一个开源的容器编排和管理平台,由Google开发并维护。它最初是为了解决谷歌内部大规模容器管理的问题而设计的,后来在2014年开源,成为云原生技术的核心组成部分。1 K8…...