QT(19)-QCamera

QT(19)-QCamera

  • 1 公有类型
    • 1.1 帧速率
    • 1.2 捕获模式
    • 1.3 错误类型
    • 1.4 摄像头锁定状态改变的原因
    • 1.5 摄像头锁定的整体状态
    • 1.6 摄像头可以应用锁定的类型
    • 1.7 QCamera::Position
    • 1.8 QCamera::State
    • 1.9 QCamera::Status
  • 2 公有函数
    • 2.1 构造函数:
    • 2.2 析构函数:
    • 2.3 成员函数:
  • 3 公有槽
  • 4 信号

1 公有类型

1.1 帧速率

struct FrameRateRange
{qreal	maximumFrameRate;qreal	minimumFrameRate;
}

当最小帧率等于最大帧率时,表示帧率固定。如果不是,实际帧率在最小值和最大值之间波动。

1.2 捕获模式

QCamera::CaptureMode

  • QCamera::CaptureViewfinder (0): 摄像头仅配置为显示取景器,这意味着摄像头被激活用于预览,但不捕获图片或视频。这个模式常用于实时查看而不进行实质性的捕获操作。

  • QCamera::CaptureStillImage (0x01): 摄像头配置为捕获静态图像。在这种模式下,摄像头被优化用于拍照,可以捕获单个图片帧。

  • QCamera::CaptureVideo (0x02): 摄像头配置为视频捕获。此模式下,摄像头用于录制连续的视频帧。

这些模式可以单独使用,也可以组合使用,这样可以允许同时设置多个模式(如果摄像头硬件支持的话)。例如,可以同时设置 CaptureStillImage 和 CaptureVideo,如果摄像头能够同时处理静态图像捕获和视频录制的话。

1.3 错误类型

QCamera::Error

  • QCamera::NoError (0): 没有错误发生。这意味着摄像头操作正常,没有检测到任何问题。

  • QCamera::CameraError (1): 发生了一个通用的摄像头错误。这是一个泛型错误,表明在操作摄像头时出现了问题,但没有更具体的错误信息。

  • QCamera::InvalidRequestError (2): 系统资源不支持请求的功能。这意味着尝试执行的操作不被当前系统的摄像头或相关资源支持。

  • QCamera::ServiceMissingError (3): 没有可用的摄像头服务。这个错误表明应用程序尝试访问的摄像头服务不存在,可能是因为硬件问题、驱动程序未安装或系统配置问题。

  • QCamera::NotSupportedFeatureError (4): 不支持的功能。这表明尝试使用的摄像头特性或功能不被当前的摄像头硬件或驱动程序支持。

1.4 摄像头锁定状态改变的原因

QCamera::LockChangeReason

  • QCamera::LockChangeReason 枚举定义了摄像头锁定状态改变的原因。这些状态变更原因有助于理解和响应摄像头的锁定机制,尤其是在自动对焦和曝光控制等方面。以下是各个常量的详细说明:

  • QCamera::UserRequest (0): 锁定状态因用户请求而改变,通常是为了解锁摄像头设置。这表明状态变更是由用户的操作引起的,如用户主动改变对焦或曝光设置。

  • QCamera::LockAcquired (1): 锁定状态成功变更为 QCamera::Locked。这意味着摄像头已成功获取所需的锁定(例如自动对焦锁定),并且现在处于锁定状态。

  • QCamera::LockFailed (2): 摄像头未能获取请求的锁定,可能是由于自动对焦失败、曝光超出支持范围等原因。这表明尽管有尝试,但摄像头未能实现或维持请求的锁定状态。

  • QCamera::LockLost (3): 摄像头无法维持请求的锁定。锁定状态改变为 QCamera::Unlocked。这通常发生在摄像头无法保持当前的焦点或曝光设置时。

  • QCamera::LockTemporaryLost (4): 锁定丢失,但摄像头正在努力重新获取。这个值常用于连续对焦模式中,当摄像头失去焦点时,焦点锁定状态会改变为 Qcamera::Searching,原因是 LockTemporaryLost。这表明摄像头正在尝试恢复到先前的锁定状态。

了解这些锁定变更原因有助于开发者编写更为精细和响应用户操作的摄像头控制逻辑,从而提升应用程序的用户体验和性能。

1.5 摄像头锁定的整体状态

QCamera::LockStatus 枚举定义了摄像头锁定的整体状态,这些状态反映了摄像头对焦、曝光或白平衡锁定的当前状况。这些状态有助于开发者了解摄像头当前的操作模式和行为。以下是每个常量的详细描述:

  • QCamera::Unlocked (0): 应用程序对摄像头设置的值不感兴趣。摄像头可能会保持这个参数不变,这在对焦功能中很常见,或者为了保持取景器图像的质量,不断调整曝光和白平衡。在这种状态下,摄像头没有被锁定到特定的焦点、曝光或白平衡设置。

  • QCamera::Searching (1): 应用程序已经请求摄像头的对焦、曝光或白平衡锁定,使用了 QCamera::searchAndLock() 方法。这个状态表明摄像头正在聚焦或计算曝光和白平衡。在此阶段,摄像头正努力确定最佳的设置值。

  • QCamera::Locked (2): 摄像头的对焦、曝光或白平衡已经锁定。摄像头已经准备好进行捕获,应用程序可以检查曝光是否保持不变。通常情况下,“锁定”状态意味着请求的参数被锁定,除非在需要不断更新参数的情况下(例如,在连续对焦模式下,只要物体处于焦点中,即使实际对焦距离可能不断变化,焦点也被视为锁定)。

这些状态使应用程序能够更精确地控制摄像头行为,例如,在捕获关键瞬间之前确保摄像头已经正确对焦和调整了曝光。通过这种方式,可以提高图片或视频质量,并确保在需要时能够捕获最佳图像。

1.6 摄像头可以应用锁定的类型

QCamera::LockType 枚举定义了摄像头可以应用锁定的类型。这些锁定类型用于控制摄像头的不同功能,如曝光、白平衡和对焦。QCamera::LockTypes 是一个通过 QFlags 定义的类型,它允许组合不同的 LockType 值来同时应用多种锁定。以下是 LockType 枚举的详细描述:

  • QCamera::NoLock (0): 没有应用任何锁定。这个值表示摄像头的所有功能都处于自动调节模式,没有任何特定的锁定限制。

  • QCamera::LockExposure (0x01): 锁定摄像头的曝光设置。在这种锁定类型下,摄像头的曝光设置被固定,不会根据环境光线的变化自动调整。

  • QCamera::LockWhiteBalance (0x02): 锁定摄像头的白平衡设置。启用这种锁定后,摄像头会保持当前的白平衡设置,不会根据环境光源的颜色变化进行调整。

  • QCamera::LockFocus (0x04): 锁定摄像头的对焦点。这意味着一旦锁定,摄像头的焦点不会随着场景中物体的移动或距离的改变而改变。

它允许将多个 LockType 值通过位或操作组合起来,这样可以同时请求多种类型的锁定。例如,如果应用程序需要在拍摄过程中保持曝光和对焦不变,可以将 LockExposure 和 LockFocus 组合使用。

这种灵活性使得开发者可以根据需要精确控制摄像头的行为,以适应不同的拍摄条件和要求。

1.7 QCamera::Position

QCamera::Position 枚举用于指定摄像头在系统硬件上的物理位置。这对于区分设备上前置和后置摄像头特别有用,尤其是在移动设备或具有多个摄像头的系统上。以下是各个常量的详细描述:

  • QCamera::UnspecifiedPosition (0): 摄像头位置未指定或未知。这个值用于表示无法确定摄像头的具体位置,或者位置信息不适用的情况。

  • QCamera::BackFace (1): 摄像头位于系统硬件的背面。例如,在移动设备上,这意味着摄像头位于与屏幕相反的一侧。后置摄像头通常用于拍摄远距离的物体或景色。

  • QCamera::FrontFace (2): 摄像头位于系统硬件的前面。例如,在移动设备上,这表示摄像头与屏幕在同一侧。前置摄像头常用于自拍或视频通话,其取景器帧通常会水平镜像,使用户能够像看镜子一样看到自己。然而,捕获的图像或视频并不会被镜像。

通过识别摄像头的物理位置,应用程序可以提供更符合用户期望的行为,例如,自动选择后置摄像头进行拍照或视频录制,选择前置摄像头进行自拍或视频通话。此外,处理镜像视图也是前置摄像头特有的需求,因此知道摄像头的位置可以帮助适当调整用户界面和图像处理流程。

1.8 QCamera::State

QCamera::State 枚举定义了摄像头的不同工作状态,表示摄像头当前的操作模式和可用性。这些状态有助于管理摄像头的生命周期和配置过程。以下是各个常量的详细描述:

  • QCamera::UnloadedState (0): 这是摄像头的初始状态,此时摄像头未加载。在这个状态下,除了支持的捕获模式之外,摄像头的能力是未知的。虽然在这个状态下支持的设置未知,但仍允许设置摄像头捕获设置,如编解码器、分辨率或帧率。

  • QCamera::LoadedState (1): 摄像头已加载并准备配置。在这个状态下,允许查询摄像头的能力,设置捕获分辨率、编解码器等。但是,取景器在加载状态下不处于活动状态。在加载状态下,摄像头消耗电力。

  • QCamera::ActiveState (2): 当摄像头启动后,进入活动状态。在这个状态下,取景器显示视频帧,摄像头准备好进行捕获。活动状态表示摄像头正在运行,并且可以执行捕获任务,如拍照或录像。

通过这些状态,QCamera 类提供了对摄像头操作的详细控制,允许开发者根据应用程序的需求来管理摄像头资源。例如,可以在应用程序不需要摄像头时将其卸载以节省电力,或者在需要进行视频捕获之前加载和配置摄像头。

1.9 QCamera::Status

QCamera::Status 枚举详细定义了摄像头的当前状态,这些状态提供了关于摄像头操作和可用性的更细致信息。以下是每个状态的详细描述:

  • QCamera::ActiveStatus (8): 摄像头已启动并能产生数据。在活动状态下,取景器显示视频帧。根据后端,更改某些摄像头设置(如捕获模式、编解码器或分辨率)可能会导致摄像头状态变更为 LoadedStatus 和 StartingStatus,以应用设置,然后在摄像头准备就绪时恢复到 ActiveStatus。

  • QCamera::StartingStatus (6): 摄像头正在启动,作为状态变为 QCamera::ActiveState 的结果。此时,摄像头服务还未准备好进行捕获。

  • QCamera::StoppingStatus (7): 摄像头正在停止,作为状态从 QCamera::ActiveState 变更到 QCamera::LoadedState 或 QCamera::UnloadedState 的结果。

  • QCamera::StandbyStatus (5): 摄像头处于省电的待机模式。在 QCamera::LoadedState 状态下,经过一段时间的不活动后,摄像头可能进入待机模式。

  • QCamera::LoadedStatus (4): 摄像头已加载并准备配置。这个状态表明摄像头设备已打开,并且可以查询支持的图像和视频捕获设置,如分辨率、帧率和编解码器。

  • QCamera::LoadingStatus (2): 摄像头设备正在加载,作为状态从 QCamera::UnloadedState 变更到 QCamera::LoadedState 或 QCamera::ActiveState 的结果。

  • QCamera::UnloadingStatus (3): 摄像头设备正在卸载,作为状态从 QCamera::LoadedState 或 QCamera::ActiveState 变更到 QCamera::UnloadedState 的结果。

  • QCamera::UnloadedStatus (1): 摄像头的初始状态,此时摄像头未加载。包括支持的捕获设置在内的摄像头能力可能未知。

  • QCamera::UnavailableStatus (0): 摄像头或摄像头后端不可用。

这些状态为开发者提供了精确的摄像头状态信息,帮助他们更好地管理摄像头资源,优化应用程序的性能,并处理各种摄像头操作相关的情况。

2 公有函数

2.1 构造函数:

  • QCamera(QCamera::Position position, QObject *parent = nullptr): 根据摄像头的物理位置(前置或后置)创建一个 QCamera 对象。
  • QCamera(const QCameraInfo &cameraInfo, QObject *parent = nullptr): 使用指定的 QCameraInfo 对象来初始化 QCamera,可以选择特定的摄像头。
  • QCamera(const QByteArray &deviceName, QObject *parent = nullptr): 使用设备名称来初始化 QCamera。
  • QCamera(QObject *parent = nullptr): 默认构造函数,创建一个 QCamera 对象。

2.2 析构函数:

  • virtual ~QCamera(): 虚析构函数,确保子类的适当清理。

2.3 成员函数:

  • QCamera::CaptureModes captureMode() const: 返回当前设置的捕获模式。
  • QCamera::Error error() const: 返回最后的错误代码。
  • QString errorString() const: 返回关于最后错误的详细描述。
  • QCameraExposure *exposure() const: 返回控制摄像头曝光的对象。
  • QCameraFocus *focus() const: 返回控制摄像头对焦的对象。
  • QCameraImageProcessing *imageProcessing() const: 返回处理摄像头图像的对象。
  • bool isCaptureModeSupported(QCamera::CaptureModes mode) const: 检查特定的捕获模式是否被支持。
  • QCamera::LockStatus lockStatus() const: 返回摄像头的锁定状态。
  • QCamera::LockStatus lockStatus(QCamera::LockType lockType) const: 返回指定类型锁定的状态。
  • QCamera::LockTypes requestedLocks() const: 返回请求的锁定类型。
  • void setViewfinder(QVideoWidget *viewfinder): 设置视频取景器。
  • void setViewfinder(QGraphicsVideoItem *viewfinder): 设置图形视图项为取景器。
  • void setViewfinder(QAbstractVideoSurface *surface): 设置视频表面为取景器。
  • void setViewfinderSettings(const QCameraViewfinderSettings &settings): 设置取景器的配置。
  • QCamera::State state() const: 返回摄像头的状态。
  • QCamera::Status status() const: 返回摄像头的详细状态。
  • QCamera::LockTypes supportedLocks() const: 返回支持的锁定类型。
  • QList< QCamera::FrameRateRange> supportedViewfinderFrameRateRanges(…) const: 返回支持的取景器帧率范围。
  • QList< QVideoFrame::PixelFormat> supportedViewfinderPixelFormats(…) const: 返回支持的取景器像素格式。
  • QList< QSize> supportedViewfinderResolutions(…) const: 返回支持的取景器分辨率。
  • QList < QCameraViewfinderSettings> supportedViewfinderSettings(…) const: 返回支持的取景器设置。
  • QCameraViewfinderSettings viewfinderSettings() const: 获取当前取景器的设置。

3 公有槽

QCamera 类的公共槽(Public Slots)提供了一组函数,使得可以在运行时通过信号和槽机制控制摄像头的行为。这些槽可以被 Qt 事件处理系统或者其他 Qt 对象通过信号连接和调用。下面是每个公共槽的简要说明:

  • load(): 加载摄像头设备,使其准备就绪但不开始捕获。这个槽用于将摄像头从未加载状态转变为加载状态,这时可以查询摄像头的能力并进行配置。

  • searchAndLock(QCamera::LockTypes locks): 请求锁定指定类型的摄像头功能,如对焦、曝光或白平衡。这通常用于在拍照或录像前确保摄像头设置稳定。

  • searchAndLock(): 请求锁定所有支持的摄像头功能,通常是对焦、曝光和白平衡。这个槽函数不需要参数,表示锁定所有可能的类型。

  • setCaptureMode(QCamera::CaptureModes mode): 设置摄像头的捕获模式,如静态图像、视频等。这个槽允许在运行时改变摄像头的工作模式。

  • start(): 启动摄像头并开始捕获视频流到取景器或直接进行视频或图像捕获。这个槽函数会将摄像头从加载状态或未加载状态转变为活动状态。

  • stop(): 停止摄像头的活动,包括视频捕获和取景器的预览。这将把摄像头从活动状态转换回加载状态或未加载状态,取决于之前的状态。

  • unload(): 卸载摄像头设备,释放相关资源。这个槽函数用于从加载状态或活动状态转换回未加载状态。

  • unlock(QCamera::LockTypes locks): 解锁指定类型的摄像头功能。这通常在捕获完成后使用,以允许摄像头自动调整对焦、曝光和白平衡。

  • unlock(): 解锁所有之前锁定的摄像头功能。这个槽函数不需要参数,表示解锁所有之前通过 searchAndLock 锁定的功能。

这些槽为开发者提供了灵活的方式来控制摄像头的状态和功能,使得可以根据应用程序的需求动态调整摄像头的配置和行为。通过信号和槽机制,可以方便地在 Qt 的事件驱动框架中集成摄像头控制逻辑。

4 信号

在 QCamera 类中,信号(Signals)用于通知应用程序有关摄像头状态的变化或特定事件的发生。这些信号可以被应用程序捕获,以便进行适当的响应或处理。以下是 QCamera 类中定义的信号及其描述:

  • captureModeChanged(QCamera::CaptureModes mode): 当摄像头的捕获模式改变时发出。它提供了新的捕获模式作为参数。

  • errorOccurred(QCamera::Error value): 当摄像头遇到错误时发出。它提供了错误类型作为参数,允许应用程序识别和响应具体的错误情况。

  • lockFailed(): 当摄像头尝试锁定(对焦、曝光或白平衡)但失败时发出。这可以用于通知用户锁定操作未成功。

  • lockStatusChanged(QCamera::LockType lock, QCamera::LockStatus status, QCamera::LockChangeReason reason): 当摄像头的锁定状态改变时发出。它提供了锁定类型、新的锁定状态和状态变化的原因。

  • lockStatusChanged(QCamera::LockStatus status, QCamera::LockChangeReason reason): 这是重载形式,用于通知锁定状态的通用变化,而不是特定类型的锁定。

  • locked(): 当摄像头成功锁定(对焦、曝光或白平衡)时发出。这可以用来通知应用程序摄像头已准备好进行捕获。

  • stateChanged(QCamera::State state): 当摄像头的状态改变时发出。它提供了新的状态作为参数。

  • statusChanged(QCamera::Status status): 当摄像头的详细状态改变时发出。这个信号提供了新的详细状态作为参数。

通过连接这些信号到相应的槽函数,应用程序可以实时响应摄像头的状态变化、处理错误、响应锁定状态的更新等。这使得应用程序能够更加动态和智能地与摄像头交互,提高用户体验和应用性能。

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

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

相关文章

交通标志识别项目 | 基于Tensorflow+SSD实现道路交通标志识别

项目应用场景 面向智能驾驶或自动驾驶场景道路道路交通标志的识别&#xff0c;在交通标志识别的基础上为下一步的智能决策提供前提 项目效果&#xff1a; 项目细节 > 具体参见项目 README.md (1) 安装依赖 Python3.5、TensorFlow v0.12.0、Pickle、OpenCV-Python、Matplotl…

论文笔记✍GS3D- An Efficient 3D Object Detection Framework for Autonomous Driving

论文笔记✍GS3D: An Efficient 3D Object Detection Framework for Autonomous Driving &#x1f4dc; Abstract &#x1f528; 主流做法限制 &#xff1a; 我们在自动驾驶场景中提出了一种基于单个 RGB 图像的高效 3D 物体检测框架。我们的工作重点是提取 2D 图像中的底层 3…

AIGC-Stable Diffusion发展及原理总结

目录 一. AIGC介绍 1. 介绍 2. AIGC商业化方向 3. AIGC是技术集合 4. AIGC发展三要素 4.1 数据 4.2 算力 4.3 算法 4.3.1 多模态模型CLIP 4.3.2 图像生成模型 二. Stable Diffusion 稳定扩散模型 1. 介绍 1.1 文生图功能&#xff08;Txt2Img) 1.2 图生图功能&…

算法2.6基数排序

基数排序 属于分配式排序,又称桶子法,通过键值的各个位上的值,将要排序的元素分配至某些桶中,达到排序的作用. 基数排序属于稳定性排序,是效率高的稳定性排序法 是桶排序的扩展,将整数按照位数进行切割,再按各个位数进行比较 是用空间换时间的经典算法 在使用8kw个数据进行…

计算机网络入门基础知识详解

计算机网络入门基础教程详解 一、计算机网络概述 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路和通信设备连接起来&#xff0c;在网络操作系统、网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传…

数据结构(六)——图的应用

6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E)&#xff0c;⽣成树不同&#xff0c;每棵树的权&#xff08;即树中所有边上的权值之和&#xff09;也可能不同。设R为G的所有⽣成树的集合&#xff0c;若T为R中边的权值之和最小的生成树&#xff0c;则T称为G的…

计算机视觉新巅峰,微软牛津联合提出MVSplat登顶3D重建

开篇&#xff1a;探索稀疏多视图图像的3D场景重建与新视角合成的挑战 3D场景重建和新视角合成是计算机视觉领域的一项基础挑战&#xff0c;尤其是当输入图像非常稀疏&#xff08;例如&#xff0c;只有两张&#xff09;时。尽管利用神经场景表示&#xff0c;例如场景表示网络&a…

代码随想录第27天 | 39. 组合总和、40.组合总和II、131.分割回文串

一、前言 今天的主题还是回溯算法&#xff0c;还是根据那个backtracking模板&#xff0c;但是今天会涉及到去重和一些小细节的问题。 二、组合总和 1、思路&#xff1a; 我一开始的想法就是在for循环转化为&#xff1a; for(int i 0; i < size; i) 但是这个是会陷入一…

Flink中几个关键问题总结

硬核&#xff01;八张图搞懂 Flink 端到端精准一次处理语义 Exactly-once&#xff08;深入原理&#xff0c;建议收藏&#xff09; Flink可靠性的基石-checkpoint机制详细解析 硬核&#xff01;一文学完Flink流计算常用算子&#xff08;Flink算子大全&#xff09;

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果 一、简单介绍 二、简单颜色反转效果实现原理 三、简单颜色反转效果案例实现简单步骤 四、注…

壁纸小程序Vu3(预览页面:弹窗)

1.展示跳转后的分类列表图片 classlist.vue <template><view class"classlist"><view class"content"><navigator class"item" v-for"item in 10"><image src"../../common/images/64.png" mode…

【OpenCV-环境搭建】

OpenCV 环境搭建 ■ OpenCV-windows■ OpenCV-IMAX6U■ OpenCV-■ OpenCV- ■ OpenCV-windows ■ OpenCV-IMAX6U OpenCV-IMAX6U ■ OpenCV- ■ OpenCV-

基于arkTS开发鸿蒙app应用案例——通讯录案例

1.项目所用技术栈 arkTS node.js express mongoDB 2.效果图 3.源码 Index.ets&#xff08;登录页&#xff09; 登陆时让前端访问数据库中已经存好的账号密码&#xff0c;如果可以查询到数据库中的数据&#xff0c;则账号密码正确&#xff0c;登录成功&#xff0c;否则登录…

Docker容器赋能TitanIDE:引领编程新纪元的集成开发环境

Docker是一种容器化技术&#xff0c;它可以将应用程序和其所有的依赖项打包到一个轻量级、可移植的容器中。以下是Docker的基本概念和优势&#xff1a; 基本概念&#xff1a; 镜像&#xff08;Image&#xff09;&#xff1a;一个镜像是一个只读的模板&#xff0c;可以用于创建…

17.应用负载压力测试

早些点&#xff0c;下午题考&#xff0c;最近几年出现的少&#xff1b; 备考较为简单&#xff1b;历年真题相似度高&#xff1b; 主要议题&#xff1a; 1.负载压力测试概述 注意这些测试细微的差别&#xff1b; 负载测试和压力测试的方法比较相似&#xff0c;但是目的不同&a…

学习 MongoDB:打开强大的数据库技术大门

一、基本概念 MongoDB 是一个基于分布式文件存储的文档数据库&#xff0c;由 C 语言编写。它旨在为 Web 应用提供可扩展的高性能数据存储解决方案。 相信MySQL我们非常的熟悉&#xff0c;那么MySQL的表结构与MongoDB的文档结构进行类比的话可能更好理解MongoDB。 MySQL的数据…

ubuntu 20 虚拟机配置静态ip

在/etc/netplan/ 中得文件里&#xff08;类似&#xff1a;01-network-manager-all.yaml&#xff09;添加 # Let NetworkManager manage all devices on this system network:ethernets:ens33:dhcp4: noaddresses: [192.168.40.128/24]gateway4: 192.168.40.2optional: truenam…

WPF —— TreeView树形控件

1 TreeView简介 TreeView 表示一个控件&#xff0c;该控件在树结构&#xff08;其中的项可以展开和折叠&#xff09;中显示分层数据。 TreeView 是一个 ItemsControl&#xff0c;这意味着它可以包含任何类型的对象的集合 (&#xff0c;例如字符串、图像或面板) 。 2 Tree Vie…

【iOS ARKit】3D 视频

在AR 中播放视频也是一种常见的需求&#xff0c;如在一个展厅中放置的虚拟电视上播放宣传视频&#xff0c;或者在游戏中为营造氛围而设置的虚拟电视视频播放&#xff0c;或者在识别的2D个人名片上播放自我介绍视频&#xff0c;因视频具有静态图像无法比拟的综合信息展示能力&am…

NoSQL(非关系型数据库)之Redis

目录 一、 关系型数据库与非关系型数据库 1.1 关系型数据库 1.2 非关系型数据库 1.3 区别 1.3.1 数据存储方式不同 1.3.2 扩展方式不同 1.4 非关系型数据库产生背景 二、 Redis简介 2.1 Redis概述 2.2 Redis优点 2.3 Redis为什么这么快&#xff1f; 总结 一 数据流…