当前位置: 首页 > news >正文

qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别

qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别

在这里插入图片描述

code review!

参考笔记
1.qt-C++笔记之重写QGraphicsItem的paint方法(自定义QGraphicsItem)

文章目录

  • qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别
    • 一、QLine、QPainterPath、QGraphicsPathItem、自定义 QGraphicsPathItem 的区别与使用场景
      • 表格:类的比较
      • 简洁对比示例
        • 示例 1:使用 QLine 绘制简单直线
        • 示例 2:使用 QPainterPath 绘制复杂路径
        • 示例 3:在 QGraphicsScene 中使用 QGraphicsPathItem
        • 示例 4:自定义 QGraphicsPathItem 并实现特殊交互
    • 二、QRect、QGraphicsRectItem、自定义 QGraphicsRectItem 的区别与使用场景
      • 表格:类的比较
      • 简洁对比示例
        • 示例 1:使用 QRect 进行布局计算
        • 示例 2:在 QGraphicsScene 中使用 QGraphicsRectItem
        • 示例 3:自定义 QGraphicsRectItem 并实现特殊功能
    • 三、总结比较
      • 表格:关键区别和适用场景
    • 四、自定义 QGraphicsRectItem、自定义 QGraphicsPathItem 与自定义 QGraphicsItem 的区别
      • 4.1 继承层次与基础功能
      • 4.2 差异对比
    • 五、使用场景与示例
      • 5.1 自定义 QGraphicsRectItem
      • 5.2 自定义 QGraphicsPathItem
      • 5.3 自定义 QGraphicsItem
    • 六、总结与选择建议
      • 6.1 何时选择自定义 QGraphicsRectItem / QGraphicsPathItem
      • 6.2 何时选择自定义 QGraphicsItem
      • 6.3 选择建议

一、QLine、QPainterPath、QGraphicsPathItem、自定义 QGraphicsPathItem 的区别与使用场景

表格:类的比较

类名定义特点使用场景
QLine表示由两点定义的直线段- 轻量级
- 整数精度
- 几何计算
- 基本绘制
QPainterPath描述复杂绘图路径的类- 灵活构建任意复杂路径
- 浮点精度
- 支持布尔运算
- 复杂形状绘制
- 路径动画
QGraphicsPathItem在 QGraphicsScene 中显示 QPainterPath 的图形项- 可视化复杂路径
- 支持交互和变换
- 图形编辑器
- 数据可视化
自定义 QGraphicsPathItem继承 QGraphicsPathItem,实现自定义行为- 可扩展性强
- 重写事件处理和绘制方法
- 定制交互
- 特定功能组件

简洁对比示例

示例 1:使用 QLine 绘制简单直线
QLine line(0, 0, 100, 100);
QPainter painter(this);
painter.drawLine(line);
  • 使用场景:当需要在窗口上绘制简单的直线时。
示例 2:使用 QPainterPath 绘制复杂路径
QPainterPath path;
path.moveTo(0, 0);
path.lineTo(50, 100);
path.cubicTo(80, 0, 120, 100, 150, 0);QPainter painter(this);
painter.drawPath(path);
  • 使用场景:当需要绘制复杂的曲线和形状时。
示例 3:在 QGraphicsScene 中使用 QGraphicsPathItem
QPainterPath path;
path.addEllipse(0, 0, 100, 100);QGraphicsScene *scene = new QGraphicsScene(this);
QGraphicsView *view = new QGraphicsView(scene, this);QGraphicsPathItem *item = new QGraphicsPathItem(path);
scene->addItem(item);
  • 使用场景:当需要将复杂路径添加到场景中以支持交互时。
示例 4:自定义 QGraphicsPathItem 并实现特殊交互
class MyPathItem : public QGraphicsPathItem {
public:MyPathItem(const QPainterPath &path) : QGraphicsPathItem(path) {}protected:void mousePressEvent(QGraphicsSceneMouseEvent *event) override {// 实现自定义的鼠标按下事件处理}void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override {// 实现自定义的绘制QGraphicsPathItem::paint(painter, option, widget);}
};// 使用自定义项
QPainterPath path;
// ... 构建路径 ...MyPathItem *item = new MyPathItem(path);
scene->addItem(item);
  • 使用场景:当需要自定义图形项的交互行为或绘制外观时。

二、QRect、QGraphicsRectItem、自定义 QGraphicsRectItem 的区别与使用场景

表格:类的比较

类名定义特点使用场景
QRect表示矩形区域的类- 轻量级
- 整数精度
- 布局计算
- 区域检测
QGraphicsRectItem在 QGraphicsScene 中显示矩形的图形项- 可视化矩形
- 支持交互和变换
- 图形元素
- 绘图工具
自定义 QGraphicsRectItem继承 QGraphicsRectItem,实现自定义行为- 可扩展性强
- 重写事件处理和绘制方法
- 特定交互
- 组件封装

简洁对比示例

示例 1:使用 QRect 进行布局计算
QRect rect(0, 0, 100, 50);
QPoint point(50, 25);if (rect.contains(point)) {// 点在矩形内
}
  • 使用场景:用于界面元素的位置和布局计算。
示例 2:在 QGraphicsScene 中使用 QGraphicsRectItem
QGraphicsScene *scene = new QGraphicsScene(this);
QGraphicsView *view = new QGraphicsView(scene, this);QGraphicsRectItem *item = new QGraphicsRectItem(0, 0, 100, 50);
item->setBrush(Qt::blue);
scene->addItem(item);
  • 使用场景:当需要在场景中显示矩形并支持交互时。
示例 3:自定义 QGraphicsRectItem 并实现特殊功能
class MyRectItem : public QGraphicsRectItem {
public:MyRectItem(qreal x, qreal y, qreal w, qreal h) : QGraphicsRectItem(x, y, w, h) {}protected:void mousePressEvent(QGraphicsSceneMouseEvent *event) override {// 实现自定义的鼠标按下事件处理}void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override {// 实现自定义的绘制,例如绘制渐变填充QLinearGradient gradient(rect().topLeft(), rect().bottomRight());gradient.setColorAt(0, Qt::white);gradient.setColorAt(1, Qt::blue);painter->setBrush(gradient);painter->drawRect(rect());}
};// 使用自定义项
MyRectItem *item = new MyRectItem(0, 0, 100, 50);
scene->addItem(item);
  • 使用场景:当需要自定义矩形的交互行为或绘制外观时。

三、总结比较

表格:关键区别和适用场景

类别QLine / QRectQPainterPathQGraphicsPathItem / QGraphicsRectItem自定义 QGraphicsItem
定义基础几何类,表示直线段和矩形区域绘图路径类,描述复杂路径图形项类,在场景中显示图形继承图形项,添加自定义行为
特点轻量级,整数精度,不支持交互灵活构建复杂路径,浮点精度,支持布尔运算可视化,支持交互和变换,属性可设置可扩展性强,重写事件和绘制方法
使用场景几何计算,基本绘制,布局计算复杂形状绘制,路径动画,精确碰撞检测图形编辑器,数据可视化,游戏开发定制交互,特定功能组件,动画效果
交互性不支持交互,需要手动处理不支持交互,需要手动处理支持交互,如选择、移动、缩放支持自定义交互,重写事件处理
绘制方式使用 QPainter 在小部件上绘制使用 QPainter 绘制复杂形状在 QGraphicsScene 中绘制在 QGraphicsScene 中绘制,自定义绘制

通过以上对比,可以根据具体需求选择合适的类:

  • 需要简单的几何计算或基本形状的数据表示时,使用 QLine 和 QRect。
  • 需要绘制复杂路径或形状时,使用 QPainterPath。
  • 需要在图形场景中显示和操作图形对象时,使用 QGraphicsPathItem 或 QGraphicsRectItem。
  • 当标准图形项无法满足需求,需要特殊行为或外观时,通过继承创建自定义的 QGraphicsItem。

四、自定义 QGraphicsRectItem、自定义 QGraphicsPathItem 与自定义 QGraphicsItem 的区别

4.1 继承层次与基础功能

  • 自定义 QGraphicsRectItem / QGraphicsPathItem:

    • 继承关系:QGraphicsRectItem 和 QGraphicsPathItem 都是 QGraphicsItem 的子类。
    • 基础功能:
      • 默认实现:它们已经实现了 QGraphicsItem 的一些纯虚函数,如 boundingRect()、paint()、shape() 等。
      • 几何形状:自带特定的几何形状(矩形或路径),并提供了相应的属性和方法操作这些形状。
      • 绘制逻辑:默认实现了绘制逻辑,可直接用于显示。
  • 自定义 QGraphicsItem:

    • 继承关系:直接继承自 QGraphicsItem。
    • 基础功能:
      • 需要自行实现:必须实现所有纯虚函数,包括 boundingRect()、paint()、shape() 等。
      • 完全自定义:具有最大的灵活性,可以定义任意的形状、绘制逻辑和交互行为。

4.2 差异对比

方面自定义 QGraphicsRectItem / QGraphicsPathItem自定义 QGraphicsItem
开发复杂度- 较低:因为继承自已有的形状类,省去了实现基本功能的工作量。
- 快速上手:只需重写需要定制的部分。
- 较高:需要从零开始实现所有必要的函数,包括几何计算和绘制逻辑。
灵活性- 有限:受到父类形状的限制,只能操作矩形或路径。
- 定制范围:适合在已有形状基础上稍作修改。
- 最大:完全自主定义形状、外观和交互行为,可实现复杂和独特的图形项。
性能- 较优:父类已经对常见操作进行了优化。
- 资源占用:较低的资源消耗。
- 视实现而定:需要注意优化,避免不必要的性能开销。
适用场景- 简单定制:当图形项是矩形或路径,并需要在此基础上增加少量功能或修改。
- 快速开发:节省时间和精力。
- 复杂需求:当需要实现特殊形状或复杂的交互行为,无法通过继承现有类来实现时。

五、使用场景与示例

5.1 自定义 QGraphicsRectItem

使用场景:

  • 当需要在矩形基础上增加特定功能,例如:
    • 添加鼠标交互,响应点击、拖动等事件。
    • 改变绘制方式,绘制特殊的边框或填充效果。
    • 增加属性,例如关联数据等。

示例:创建一个可拖动的矩形,并在被点击时改变颜色。

class CustomRectItem : public QGraphicsRectItem {
public:CustomRectItem(const QRectF &rect) : QGraphicsRectItem(rect) {setFlags(ItemIsSelectable | ItemIsMovable);setBrush(Qt::blue);}protected:void mousePressEvent(QGraphicsSceneMouseEvent *event) override {setBrush(Qt::red); // 点击时变为红色QGraphicsRectItem::mousePressEvent(event); // 调用父类处理}void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override {setBrush(Qt::blue); // 释放时变回蓝色QGraphicsRectItem::mouseReleaseEvent(event);}
};

5.2 自定义 QGraphicsPathItem

使用场景:

  • 当需要在路径基础上增加功能,例如:
    • 实现路径的动画效果。
    • 根据数据动态生成路径形状。
    • 增加交互,支持节点的拖动、编辑等。

示例:创建一个可编辑的折线路径,支持节点拖动。

class EditablePathItem : public QGraphicsPathItem {
public:EditablePathItem(const QPainterPath &path) : QGraphicsPathItem(path) {setFlags(ItemIsSelectable | ItemIsMovable);}protected:void mousePressEvent(QGraphicsSceneMouseEvent *event) override {// 实现节点选择和拖动逻辑}void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override {// 更新路径形状}void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override {// 自定义绘制,例如在节点处绘制控制点QGraphicsPathItem::paint(painter, option, widget);}
};

5.3 自定义 QGraphicsItem

使用场景:

  • 当需要完全自定义的图形项,无法通过继承现有形状类实现。
  • 需要特殊的形状、复杂的交互,或独特的绘制效果。

示例:创建一个自定义形状的图形项,例如五角星形状,并实现旋转动画。

class StarItem : public QGraphicsItem {
public:StarItem() {// 启动定时器,实现旋转动画angle = 0;timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &StarItem::rotate);timer->start(100);}QRectF boundingRect() const override {return QRectF(-50, -50, 100, 100); // 定义边界矩形}void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override {painter->save();painter->rotate(angle); // 旋转painter->setBrush(Qt::yellow);painter->drawPolygon(starPolygon()); // 绘制五角星painter->restore();}QPainterPath shape() const override {QPainterPath path;path.addPolygon(starPolygon());return path;}private:QPolygonF starPolygon() const {QPolygonF polygon;// 计算五角星的顶点坐标for (int i = 0; i < 5; ++i) {qreal theta = (i * 72 - 90) * M_PI / 180;qreal x = 40 * cos(theta);qreal y = 40 * sin(theta);polygon << QPointF(x, y);}return polygon;}void rotate() {angle += 5;if (angle >= 360) angle = 0;update();}qreal angle;QTimer *timer;
};

六、总结与选择建议

6.1 何时选择自定义 QGraphicsRectItem / QGraphicsPathItem

  • 优势:

    • 快速开发:利用已有的形状和功能,减少编码量。
    • 简单可靠:继承自经过测试的类,稳定性有保障。
    • 易于维护:代码结构清晰,易于理解和修改。
  • 适用情况:

    • 形状固定:图形项的基本形状是矩形或路径,不需要改变。
    • 功能扩展:在现有功能上增加少量特性,如交互或绘制效果。
    • 性能要求高:利用父类的优化,确保性能。

6.2 何时选择自定义 QGraphicsItem

  • 优势:

    • 无限灵活:可完全自定义形状、绘制和交互。
    • 满足特殊需求:能够实现复杂和独特的图形效果。
    • 深度优化:可以针对特定需求进行性能优化。
  • 适用情况:

    • 形状特殊:图形项的形状无法由现有类描述,需要完全自定义。
    • 复杂交互:需要实现复杂的事件处理和用户交互逻辑。
    • 独特绘制:需要超出常规的绘制效果,如动态变化、特效等。

6.3 选择建议

  • 若图形项是现有形状的扩展,且只需增加少量功能,建议继承 QGraphicsRectItem 或 QGraphicsPathItem。

    • 示例:在矩形上添加点击事件,或在路径上增加动画效果。
  • 若图形项需求复杂,无法通过继承现有形状类来满足,建议直接继承 QGraphicsItem。

    • 示例:创建复杂的自定义形状,或需要完全控制绘制和交互行为。

相关文章:

qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别

qt-C笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别 code review! 参考笔记 1.qt-C笔记之重写QGraphicsItem的paint方法(自定义QGraphicsItem) 文章目录 qt-C笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphic…...

doris:导入时实现数据转换

Doris 在数据导入时提供了强大的数据转换能力&#xff0c;可以简化部分数据处理流程&#xff0c;减少对额外 ETL 工具的依赖。主要支持以下四种转换方式&#xff1a; 列映射&#xff1a;将源数据列映射到目标表的不同列。 列变换&#xff1a;使用函数和表达式对源数据进行实时…...

新版231普通阿里滑块 自动化和逆向实现 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 补环境逆向 部分补环境 …...

如何构建树状的思维棱镜认知框架

在思维与知识管理中&#xff0c;“树状思维棱镜”通常指一种层级式、可多维度展开和不断深入&#xff08;下钻&#xff09;的认知框架。它不仅仅是普通的树状结构&#xff08;如传统思维导图&#xff09;&#xff0c;更强调“棱镜”所体现的多视角、多维度切换与综合分析的能力…...

openRv1126 AI算法部署实战之——ONNX模型部署实战

在RV1126开发板上部署ONNX算法&#xff0c;实时目标检测RTSP传输。视频演示地址 rv1126 yolov5 实时目标检测 rtsp传输_哔哩哔哩_bilibili 一、准备工作 1.从官网下载YOLOv5-v7.0工程&#xff08;YOLOv5的第7个版本&#xff09; 手动在线下载&#xff1a; Releases ultraly…...

Vue 组件开发:构建高效可复用的前端界面要素

1 引言 在现代 Web 开发中,构建高效且可复用的前端界面要素是提升开发效率和用户体验的关键。Vue.js 作为一种轻量级且功能强大的前端框架,提供了丰富的工具和机制,帮助开发者快速构建高质量的应用程序。通过合理设计和封装 Vue 组件,我们可以实现组件的高效复用,提高开发…...

Vue.js组件开发-实现全屏平滑移动、自适应图片全屏滑动切换

使用Vue实现全屏平滑移动、自适应图片全屏滑动切换的功能。使用Vue 3和Vue Router&#xff0c;并结合一些CSS样式来完成这个效果。 步骤 创建Vue项目&#xff1a;使用Vue CLI创建一个新的Vue项目。准备图片&#xff1a;将需要展示的图片放在项目的public目录下。创建组件&…...

水果实体店品牌数字化:RWA + 智能体落地方案

一、方案背景 随着数字化技术的迅猛发展&#xff0c;实体零售行业正面临前所未有的挑战与机遇。传统的零售模式难以满足消费者对个性化、便捷化、智能化的需求&#xff0c;尤其是在水果等生鲜商品领域&#xff0c;如何通过技术手段提升运营效率、增强顾客体验、拓宽盈利模式&a…...

DeepSeek模型:开启人工智能的新篇章

DeepSeek模型&#xff1a;开启人工智能的新篇章 在当今快速发展的技术浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了推动社会进步和创新的核心力量之一。而DeepSeek模型&#xff0c;作为AI领域的一颗璀璨明珠&#xff0c;正以其强大的功能和灵活的用法&…...

Kubernetes 环境中的自动化运维实战指南

Kubernetes 作为容器编排领域的领导者,已经成为云原生应用的核心基础设施。然而,随着集群规模的扩大和应用的复杂化,手动运维 Kubernetes 集群变得愈发困难。自动化运维成为提升效率、保障系统稳定性的关键。本文将详细介绍如何在 Kubernetes 环境中实施自动化运维,涵盖工具…...

深入解析 C++17 中的 std::not_fn

文章目录 1. std::not_fn 的定义与目的2. 基本用法2.1 基本示例2.2 使用 Lambda 表达式2.3 与其他函数适配器的比较3. 在标准库中的应用3.1 结合标准库算法使用3.1.1 std::find_if 中的应用3.1.2 std::remove_if 中的应用3.1.3 其他标准库算法中的应用4. 高级技巧与最佳实践4.1…...

unity实现回旋镖函数

最近学习unity2D&#xff0c;想实现一个回旋镖武器&#xff0c;发出后就可以在角色周围回旋。 一、目标 1.不是一次性的&#xff0c;扔出去、返回、没有了&#xff1b;而是扔出去&#xff0c;返回到角色后方相同距离&#xff0c;再次返回&#xff1b;再次返回&#xff0c;永远…...

想品客老师的第九天:原型和继承

原型与继承前置看这里 原型 原型都了解了&#xff0c;但是不是所有对象都有对象原型 let obj1 {}console.log(obj1)let obj2 Object.create(null, {name: {value: 荷叶饭}})console.log(obj2) obj2为什么没有对象原型&#xff1f;obj2是完全的数据字典对象&#xff0c;没有…...

力扣【416. 分割等和子集】详细Java题解(背包问题)

首先我们可以求出数组和&#xff0c;当我们找到一个子集中元素的和为数组和的一半时&#xff0c;该就说明可以分割等和子集。 对于该问题我们可以转换成背包问题&#xff0c;求 数组里的元素 装入 数组和的一半大小的背包 能取得的最大值。 然后注意可以剪枝的地方。 代码&…...

2025年AI手机集中上市,三星Galaxy S25系列上市

2025年被认为是AI手机集中爆发的一年&#xff0c;各大厂商都会推出搭载人工智能的智能手机。三星Galaxy S25系列全球上市了。 三星Galaxy S25系列包含S25、S25和S25 Ultra三款机型&#xff0c;起售价为800美元&#xff08;约合人民币5800元&#xff09;。全系搭载骁龙8 Elite芯…...

为AI聊天工具添加一个知识系统 之79 详细设计之20 正则表达式 之7

本文要点 Q750、今天我们继续聊 本中的正则表达式。 在本项目&#xff08;为AI聊天工具添加一个知识系统&#xff09;中&#xff0c;将“正则表达式” 本来是计算机科学计算机科学的一个概念&#xff0c; 推广&#xff08;扩张&#xff09;到认知科学的“认知范畴”概念&#…...

理解PLT表和GOT表

1 简介 现代操作系统都是通过库来进行代码复用&#xff0c;降低开发成本提升系统整体效率。而库主要分为两种&#xff0c;一种是静态库&#xff0c;比如windows的.lib文件&#xff0c;macos的.a&#xff0c;linux的.a&#xff0c;另一种是动态库&#xff0c;比如windows的dll文…...

6 年没回老家过年了

今天是 2025 年的第一天&#xff0c;我们一家三口去了地坛庙会玩了会儿。 不是说过年的北京是空城吗&#xff1f;我愣是没抢到大年初一的门票&#xff0c;只好在咸鱼上溢价 40 买了两张票。 坐了一个小时的地坛终于到了&#xff0c;谁知迎来的是人山人海&#xff0c;同时小白牙…...

【原创改进】SCI级改进算法,一种多策略改进Alpha进化算法(IAE)

目录 1.前言2.CEC2017指标3.效果展示4.探索开发比5.定性分析6.附件材料7.代码获取 1.前言 本期推出一期原创改进——一种多策略改进Alpha进化算法&#xff08;IAE&#xff09;~ 选择CEC2017测试集低维&#xff08;30dim&#xff09;和高维&#xff08;100dim&#xff09;进行测…...

如何把一个python文件打包成一步一步安装的可执行程序

将一个 Python 文件打包成可执行程序&#xff08;如 .exe 文件&#xff09;&#xff0c;并实现一步一步的安装过程&#xff0c;通常需要以下步骤&#xff1a; 1. 将 Python 文件打包成可执行文件 使用工具将 Python 脚本打包成可执行文件&#xff08;如 .exe&#xff09;。常用…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...