QT开发技术【qcustomplot 曲线与鼠标十字功能】
一、效果
二、代码
#include "obsersingle.h"
#include "ui_obsersingle.h"
#pragma execution_character_set("utf-8") 右键菜单acion回调
// 适应窗口大小
void ObserSingle::RescaleActionFun::fun(ObserSingle *form)
{// 自适应y轴数据范围,每次 setData 之后都要调用form->customPlot->rescaleAxes(true);form->customPlot->replot(QCustomPlot::rpQueuedReplot); // 重绘
}// 十字游标
void ObserSingle::CursorActionFun::fun(ObserSingle *form)
{// 显示十字游标if(form->cursorShow){form->lineY->point1->setCoords(0, 0);form->lineY->point2->setCoords(0, 0);form->lineX->point1->setCoords(0, 0);form->lineX->point2->setCoords(0, 0);form->cursorShow = false;}else{form->cursorShow = true;}form->customPlot->replot(QCustomPlot::rpQueuedReplot); // 重绘
} ObserSingle
ObserSingle::ObserSingle(QWidget *parent) :QWidget(parent),ui(new Ui::ObserSingle), clickMenu(new QMenu), lineY(nullptr), lineX(nullptr), cursorShow(false), midButtonPress(false), customPlot(new QCustomPlot)
{ui->setupUi(this);// 创建画布QGridLayout *layout = new QGridLayout();layout->setContentsMargins(2, 2, 2, 2);layout->addWidget(customPlot);ui->plotWindow->setLayout(layout);// 轴设置customPlot->xAxis->setRange(1, 1, Qt::AlignRight); // 设置轴刻度customPlot->xAxis->ticker()->setTickCount(8); // 设置轴刻度数目customPlot->xAxis->setLabel(tr("xAxis")); // 设置轴标签customPlot->yAxis->setRange(2, 2, Qt::AlignRight);customPlot->yAxis->ticker()->setTickCount(5);customPlot->yAxis->setLabel(tr("yAxis"));// 图例customPlot->legend->setVisible(true); // 显示customPlot->legend->setBrush(QColor(255, 255, 255, 50)); // 灰色透明customPlot->legend->setBorderPen(Qt::NoPen); // 边框隐藏customPlot->legend->setWrap(4); // 设置4个图例自动换行customPlot->legend->setFillOrder(QCPLayoutGrid::foRowsFirst); // 图例优先排序(foRowsFirst foColumnsFirst) foRowsFirst
// customPlot->plotLayout()->addElement(0, 0, customPlot->legend); // 图例位置 0 0customPlot->plotLayout()->setRowStretchFactor(0, 0.001); // 显示比例 0 0.001// 设置基本坐标轴(左侧Y轴和下方X轴)可拖动、可缩放、曲线可选、legend可选、设置伸缩比例,使所有图例可见customPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom| QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables);
// customPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom| QCP::iSelectAxes );// 设置legend只能选择图例customPlot->legend->setSelectableParts(QCPLegend::spItems);// 设置图例与曲线同步选中QObject::connect(customPlot, SIGNAL(selectionChangedByUser()), this, SLOT(selectionChanged()));// 右键action 适应窗口大小clickMenuAddAction(tr("适应窗口大小"), ":/reference/image/plot.png", new RescaleActionFun);// 右键action 十字游标clickMenuAddAction(tr("十字游标"), ":/reference/image/plot.png", new CursorActionFun);// 鼠标右键菜单栏QObject::connect(customPlot, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(onMousePress(QMouseEvent *)));// 提示线lineY = new QCPItemStraightLine(customPlot);lineY->setLayer("overlay");lineY->setPen(QPen(Qt::gray, 1, Qt::DashLine));lineY->setClipToAxisRect(true);lineY->point1->setCoords(0, 0);lineY->point2->setCoords(0, 0);lineX = new QCPItemStraightLine(customPlot);lineX->setLayer("overlay");lineX->setPen(QPen(Qt::gray, 1, Qt::DashLine));lineX->setClipToAxisRect(true);lineX->point1->setCoords(0, 0);lineX->point2->setCoords(0, 0);// 鼠标移动QObject::connect(customPlot, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(onMouseMove(QMouseEvent *)));// 鼠标释放QObject::connect(customPlot, SIGNAL(mouseRelease(QMouseEvent*)), this, SLOT(onMouseRelease(QMouseEvent *)));// 自适应y轴数据范围,每次 setData 之后都要调用customPlot->rescaleAxes(true);customPlot->replot(QCustomPlot::rpQueuedReplot); // 重绘// customPlot->setOpenGl(true);
// qDebug()<<"opengle="<<customPlot->openGl();
}ObserSingle::~ObserSingle()
{ui->plotWindow->layout()->deleteLater();QList<QString> keyList = actionFunMap.keys();for(int i=0; i<keyList.size(); i++){if(actionFunMap[keyList[i]]){delete actionFunMap[keyList[i]];}}QList<QAction *> actionList = actionMap.keys();for(int i=0; i<actionList.size(); i++){if(actionList.at(i)){delete actionList.at(i);}}if(clickMenu){clickMenu->deleteLater();}if(customPlot){customPlot->deleteLater();}delete ui;
}/** 鼠标移动 */
void ObserSingle::onMouseMove(QMouseEvent *event)
{if(midButtonPress){// posPress 与 QCursor::pos() 比较QPoint pos = QCursor::pos();int xLen = pos.x() - posPress.x();int yLen = pos.y() - posPress.y();if(qAbs(xLen) - qAbs(yLen) > 0){// 拉伸x轴if(xLen > 0){double xSize = customPlot->xAxis->range().upper - customPlot->xAxis->range().lower;customPlot->xAxis->setRangeLower(customPlot->xAxis->range().lower + xSize/20);customPlot->xAxis->setRangeUpper(customPlot->xAxis->range().upper - xSize/20);}else{double xSize = customPlot->xAxis->range().upper - customPlot->xAxis->range().lower;customPlot->xAxis->setRangeLower(customPlot->xAxis->range().lower - xSize/20);customPlot->xAxis->setRangeUpper(customPlot->xAxis->range().upper + xSize/20);}}else{// 拉伸y轴if(yLen > 0){double ySize = customPlot->yAxis->range().upper - customPlot->yAxis->range().lower;customPlot->yAxis->setRangeLower(customPlot->yAxis->range().lower - ySize/20);customPlot->yAxis->setRangeUpper(customPlot->yAxis->range().upper + ySize/20);}else{double ySize = customPlot->yAxis->range().upper - customPlot->yAxis->range().lower;customPlot->yAxis->setRangeLower(customPlot->yAxis->range().lower + ySize/20);customPlot->yAxis->setRangeUpper(customPlot->yAxis->range().upper - ySize/20);}}posPress = pos;customPlot->replot(QCustomPlot::rpQueuedReplot);}else{// 当前鼠标位置(像素坐标)int x_pos = event->pos().x();int y_pos = event->pos().y();// 像素坐标转成实际的x,y轴的坐标float x_val = customPlot->xAxis->pixelToCoord(x_pos);float y_val = customPlot->yAxis->pixelToCoord(y_pos);if(cursorShow){lineY->point1->setCoords(x_val, customPlot->yAxis->range().lower);lineY->point2->setCoords(x_val, customPlot->yAxis->range().upper);lineX->point1->setCoords(customPlot->xAxis->range().lower, y_val);lineX->point2->setCoords(customPlot->xAxis->range().upper, y_val);customPlot->replot(QCustomPlot::rpQueuedReplot);}QToolTip::hideText();QToolTip::showText(event->globalPos(),QString("x:%1 y:%2").arg(x_val).arg(y_val),this, rect());}
}/** 图例与曲线同步选中 */
void ObserSingle::selectionChanged()
{// make top and bottom axes be selected synchronously, and handle axis and tick labels as one selectable object:if (customPlot->xAxis->selectedParts().testFlag(QCPAxis::spAxis) || customPlot->xAxis->selectedParts().testFlag(QCPAxis::spTickLabels) ||customPlot->xAxis2->selectedParts().testFlag(QCPAxis::spAxis) || customPlot->xAxis2->selectedParts().testFlag(QCPAxis::spTickLabels)){customPlot->xAxis2->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);customPlot->xAxis->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);}// make left and right axes be selected synchronously, and handle axis and tick labels as one selectable object:if (customPlot->yAxis->selectedParts().testFlag(QCPAxis::spAxis) || customPlot->yAxis->selectedParts().testFlag(QCPAxis::spTickLabels) ||customPlot->yAxis2->selectedParts().testFlag(QCPAxis::spAxis) || customPlot->yAxis2->selectedParts().testFlag(QCPAxis::spTickLabels)){customPlot->yAxis2->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);customPlot->yAxis->setSelectedParts(QCPAxis::spAxis|QCPAxis::spTickLabels);}// 将图形的选择与相应图例项的选择同步for (int i=0; i<customPlot->graphCount(); ++i){QCPGraph *graph = customPlot->graph(i);QCPPlottableLegendItem *item = customPlot->legend->itemWithPlottable(graph);if (item->selected() || graph->selected()){item->setSelected(true);// 注意:这句需要Qcustomplot2.0系列版本graph->setSelection(QCPDataSelection(graph->data()->dataRange()));// 这句1.0系列版本即可// graph->setSelected(true);}}
}/** 右键菜单 */
void ObserSingle::onMousePress(QMouseEvent *event)
{if(event->button() == Qt::RightButton){clickMenu->exec(QCursor::pos());}else if(event->button() == Qt::MiddleButton){midButtonPress = true;posPress = QCursor::pos();}
}/** 鼠标释放 */
void ObserSingle::onMouseRelease(QMouseEvent *event)
{if(event->button() == Qt::MiddleButton){midButtonPress = false;}
}/** 右键菜单action点击 */
void ObserSingle::_on_action_create_triggered(void)
{QAction *action = static_cast<QAction *>(this->sender());if(actionMap.contains(action)){if(actionFunMap.contains(actionMap[action])){actionFunMap[actionMap[action]]->fun(this);}}
}/** 创建右键菜单action */
void ObserSingle::clickMenuAddAction(QString name, QString icon, MenuActionFun *fun)
{QAction *action = new QAction(QIcon(icon), name, this);actionMap.insert(action, name);QObject::connect(action, SIGNAL(triggered()), this, SLOT(_on_action_create_triggered()));clickMenu->addAction(action);actionFunMap.insert(name, fun);
}/** 绘制曲线 */
void ObserSingle::drawCurve(const QString name, const QVector<double> x, const QVector<double> y, QPen pen)
{if(curveMap.contains(name)){curveMap[name]->setData(x, y, true);}else{QCPGraph *graph = customPlot->addGraph();graph->setAntialiased(false); // 关闭抗锯齿可加快绘制速度graph->setAntialiasedFill(false);graph->setAntialiasedScatters(false);graph->setPen(pen);graph->setName(name);graph->setData(x, y, true);curveMap.insert(name, graph);}customPlot->replot(QCustomPlot::rpQueuedReplot); // 重绘
}/** 清除曲线 */
void ObserSingle::clearCurve(const QString name)
{if(curveMap.contains(name)){QVector<double> x, y;// 删除所有曲线
// customPlot->clearGraphs();QCPGraph *graph;// 移除map曲线curveMap.remove(name);QList<QString> nameList = curveMap.keys();// 重新绘画所有曲线QList<QString> nameListSave;QList<QVector<double>> xList;QList<QVector<double>> yList;QList<QPen> penList;for(int i=0; i<nameList.size(); i++){graph = curveMap[nameList[i]];curveMap.remove(nameList[i]);// 保存曲线数据x.clear();y.clear();for(int data_i=0; data_i<graph->data()->size(); data_i++){x.append(graph->data()->at(data_i)->key);y.append(graph->data()->at(data_i)->value);}// 保存曲线颜色QColor color = graph->pen().color();// 重画曲线
// DrawCurve(nameList[i], x, y, QPen(color));
// DrawCurve(nameList[i], x, y);nameListSave.append(nameList[i]);xList.append(x);yList.append(y);penList.append(QPen(color));}customPlot->clearGraphs();for(int i=0; i<nameListSave.size(); i++){drawCurve(nameListSave[i], xList[i], yList[i], penList[i]);}}customPlot->replot(QCustomPlot::rpQueuedReplot); // 重绘
}/** 自适应屏幕 */
void ObserSingle::replot(void)
{customPlot->rescaleAxes(true);
}/** 设置运行状态 */
void ObserSingle::setRunStatus(bool b)
{if(b){customPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom| QCP::iSelectAxes );// 将图形的选择与相应图例项的选择同步取消for (int i=0; i<customPlot->graphCount(); ++i){QCPGraph *graph = customPlot->graph(i);QCPPlottableLegendItem *item = customPlot->legend->itemWithPlottable(graph);if (item->selected() || graph->selected()){item->setSelected(false);QCPDataSelection select;graph->setSelection(select);}}}else{customPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom| QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables);}
}
相关文章:
QT开发技术【qcustomplot 曲线与鼠标十字功能】
一、效果 二、代码 #include "obsersingle.h" #include "ui_obsersingle.h" #pragma execution_character_set("utf-8")右键菜单acion回调 // 适应窗口大小 void ObserSingle::RescaleActionFun::fun(ObserSingle *form) {// 自适应y轴数据范围…...
[特殊字符] 大模型后训练指南:从毛坯引擎到智能助手的进化之路 [特殊字符]️
最近看了MIT 6.S191 2025这个讲座感觉讲的挺好的,然后写了一篇总结,大家感兴趣的话可以直接看视频,链接我放到文章最后。 🎯 讲座核心 这个讲座主要讲的是,当我们有了一个基础的大语言模型(就像刚出厂的毛…...
厚铜pcb生产厂家哪家好?
在为您的项目选择厚铜PCB供应商时,技术实力、生产经验与交付能力是决定产品可靠性的关键。随着新能源汽车、工业电源、5G通信等领域对高电流承载、高效散热的需求激增,厚铜PCB(铜厚3oz以上)的工艺门槛不断提升。本文结合行业头部企…...
【重走C++学习之路】22、C++11语法
目录 一、列表初始化 1.1 {}初始化 1.2 std::initializer_list 二、变量类型推导 2.1 auto 2.2 decltype 三、右值引用和移动语义 3.1 左值与左值引用 3.2 右值与右值引用 3.3 左值引用与右值引用比较 3.4 右值引用使用场景和意义 3.5 move 3.6 完美转发和万能引…...
Spring Security授权管理
授权是Spring Security的核心功能之一,是根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则可正常访问,没有访问的权限时则会被拒绝访问。认证是为了保证用户身份的合法性,而授权则是为了更细粒度地对隐私数据进行划分…...
2025A卷-正整数到Excel编号之间的转换
题目描述 用过 excel 的都知道excel的列编号是这样的: a b c … z aa ab ac … az ba bb bc … yz za zb zc … zz aaa aab aac … 分别代表以下编号: 1 2 3 … 26 27 28 29 … 52 53 54 55 … 676 677 678 679 … 702 703 704 705 … 请写个函数&…...
算法设计与分析(期末试卷)
目录 一、频度计算(15 分) 二、项目工期问题(20 分) 三、TSP 问题的贪心算法(15 分) 四、“秤心如意”(15 分) 五、工作指派问题(20 分) 六、计算复杂度…...
springboot(2.6.13)自定义用户授权管理
1.自定义用户访问控制 a.重写configure(HttpSecurity http)方法 在自定义配置类SecurityConfig中重写 Override protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/deta…...
JavaWeb:vueaxios
一、简介 什么是vue? 快速入门 <!-- 3.准备视图元素 --><div id"app"><!-- 6.数据渲染 --><h1>{{ msg }}</h1></div><script type"module">// 1.引入vueimport { createApp, ref } from https://unpkg.com/vu…...
uniapp常用
1.下载文件带进度提示 <template> <view> <button click"startDownload">下载文件</button> <progress :percent"progress" stroke-width"3" /> </view> </template> <…...
etcd 的安装及使用
介绍 Etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,用于配置共享和服务发现等。它使用 Raft 一致性算法来保持集群数据的一致性,且客户端通过长连接 watch 功能,能够及时收到数据变化通知,相较于 Zookeepe…...
uni-app vue3 实现72小时倒计时功能
功能介绍 ,数组项有一个下单时间 ,比如今天下单在72小时内可以继续支付,超过则默认取消订单 页面按钮处 加上倒计时 <!-- 倒计时 --> <text v-if"item.timeLeft > 0">{{ formatTime(item.remaining) }}</text&g…...
【C语言】初阶算法相关习题(二)
个人主页:夜晚中的人海 文章目录 ⭐一、两数之和🏠二、珠玑妙算🎡三、寻找奇数🚀四、截取字符串🎉五、寻找峰值 ⭐一、两数之和 题目描述:两数之和 解题思路: 1.先创建一个动态分配的数组ret&a…...
Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理
Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理 目录 Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理 一、简单介绍 二、Flutter 和 Android 原生之间的数据…...
STM32的SysTick
SysTick介绍 定义:Systick,即滴答定时器,是内核中的一个特殊定时器,用于提供系统级的定时服务。该定时器是一个24位的递减计数器,具有自动重载值寄存器的功能。当计数器到达自动重载值时,它会自动重新加载…...
【JS事件循环机制event-loop】
目录 0、总结1、Event-Loop 概念2、宏任务-微任务3、事件循环执行机制4、调用栈5、示例 0、总结 Tasks execute in order, and the browser may render between them 【宏任务按序执行,浏览器可以在它们之间进行渲染】Microtasks execute in order, and are execut…...
对比N+1查询和关联聚合查询
通常我们管第一种模式叫 “N1 查询”,第二种叫 “关联聚合查询”。下面从几个角度来比较,帮助你做出选择。 1. 性能与资源消耗 方案SQL 语句数网络往返次数数据库负载Java 处理N1 查询(先查项目,再遍历项目查设备状态数ÿ…...
优化 Flutter 应用启动:从冷启动到就绪仅需 2 秒
冷启动序列剖析:冷启动时,Flutter 应用需经历引擎和 Dart VM 初始化、启动 Dart Isolate、渲染第一帧等步骤。Android 和 iOS 系统分别通过启动屏幕和 Storyboard 缓解启动延迟。应用大小、初始化工作、调试模式下的 JIT 编译等因素会影响冷启动时间。优…...
牟乃夏《ArcGIS Engine 地理信息系统开发教程》学习笔记 4-空间分析与高级功能开发
目录 一、核心组件与接口回顾 (一)空间分析基础架构 (二)网络分析模块 二、矢量数据空间分析实战 (一)缓冲区分析 (二)叠加分析(以裁剪为例) 三、栅格…...
UE 滚动提示条材质制作
需要两个贴图 先制作条纹屏闪 这里RGB输出连到alpha,0为白色,到1就为黑色了 因为这个图片是RGB输出代表三个图片,看贴图颜色就知道了,然后把这三个相加一下;链接自发光颜色, 这里设置速度变量 通过网盘分…...
金融业数字化转型——深入解读77页2024年中国金融体系指标大全【附全文阅读】
本文主要介绍了金融业通行宝典中国金融体系指标大全的内容,包括央行体系、商业银行体系、非银金融机构与地方金融组织的各项指标。文章详细分析了美联储资产负債表的结构,并概述了美日欧等主要经济体资产负债表状况。 重点内容: 1. 央行体系是金融分析的重点。 2. 美联储资产…...
研究:大模型输出一致性:确定性与随机性的场景化平衡
大模型在相同输入下的输出是否一致,本质上取决于其设计目标、任务性质以及技术实现方式。这一问题需要从技术原理、应用场景、用户需求三个维度进行深度分析: 一、技术实现:确定性与随机性的平衡 模型架构的确定性基础 大模型的核心参数(如权重矩阵)在训练完成后是固定的…...
数据分析1
一、常用数据处理模块Numpy Numpy常用于高性能计算,在机器学习常常作为传递数据的容器。提供了两种基本对象:ndarray、ufunc。 ndarray具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 ufunc提供了对数组快速运算的标准数学函数。 ndar…...
vmare pro安装报错用户在命令行上发出了EULAS_AGREED=1,表示不接受许可协议的错误解决方法
问题现状和原因 用户在命令行上发出了EULAS_AGREED1,表示不接受许可协议的错误。 以上错误主要原因是因为机器安装过了vmare 卸载时没有卸载干净导致的。 解决方法: 1、控制面板-程序和功能-卸载程序。找到vamre卸载掉。 2、打开开始菜单输入注册表 …...
《Linux篇》基础开发工具——vim详细介绍
文章目录 1.软件包管理1.1 什么是软件包1.2 Linux软件生态 2.编辑器vim2.1 vim的正常/命令模式2.2 vim的末行模式2.3 vim的插入模式 3.配置vim 1.软件包管理 我们先来看一下再Linux是那个如何安装软件? 源码安装:软件是存在相互依赖的关系的࿰…...
AI图片跳舞生成视频,animate X本地部署。
本期内容打包限时免费下载https://www.kdocs.cn/l/cnQ5lNU5DFZB 对比不同算法,使用同一组图片和舞蹈视频。animate X官网,下载项目解压。按照官方教程下载模型,项目包和命名好的模型包已上传网盘,放到解压目录下即可。 安装好cond…...
Web技术与Apache网站部署
一、Web 基础与 HTTP 协议 1.1 静态网页与动态网页 静态网页 定义:由纯 HTML、CSS、JavaScript 构成,文件扩展名为 .htm 或 .html。内容在服务器生成后固定不变,仅通过客户端脚本(如 JS)实现视觉动态效果(…...
第七章:Server/Client Communication
Chapter 7: Server/Client Communication 从工具集成到服务器通信:如何让AI“远程协作”? 在上一章的工具与LLM集成中,我们已经能让AI调用真实世界的工具。但你是否想过:如果多个用户同时请求天气查询,或者需要远程控…...
Linux调试器 - gdb使用指南
目录 一、背景知识 二、开始使用 gdb (一)查看源代码相关指令 (二)程序执行控制指令 (三)断点相关指令 (四)变量操作相关指令 (五)其他常用指令 在Li…...
C++面试常青客:LRUCache最近最少使用算法
C面试常青客:LRUCache最近最少使用算法 文章目录 C面试常青客:LRUCache最近最少使用算法1.背景🏆2.原理🚀2.1基本原理2.2核心特性 3.结构3.1为什么需要 list<pair<int,int>>(双向链表)…...
【含文档+PPT+源码】基于微信小程序的社交摄影约拍平台的设计与实现
项目介绍 本课程演示的是一款基于微信小程序的社交摄影约拍平台的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系…...
jetson nano上Ubuntu系统调用摄像头bug
今天在做一个比赛的时候,通过调用摄像头做检测并输出目标角度和距离。刚开始用的是 cv::VideoCapture cap; cap.open("/dev/video0");没有任何问题,使用pnp解算得到的角度和距离都是正确的,画面也是小画面。 后面加了一些功能&…...
用Python做有趣的AI项目5:AI 画画机器人(图像风格迁移)
这个项目将使用 PyTorch 实现图像风格迁移(Neural Style Transfer),让一张图片看起来具有另一张图片的“艺术风格”。 🔧 开发环境建议 Python 3.8 PyTorch(pip install torch torchvision) PIL&#x…...
一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN
大家读完觉得有帮助记得关注和点赞!!! 抽象 在医学成像领域,深度学习的出现,尤其是卷积神经网络 (CNN) 的应用,彻底改变了医学影像的分析和解释。然而,深度学习方法通常依…...
OpenCV 图形API(68)图像与通道拼接函数------垂直拼接两个图像/矩阵的函数concatVert()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对给定的矩阵执行垂直拼接。该函数将两个 GMat 矩阵(列数相同)垂直连接: GMat A { 1, 7,2, 8,3, 9 }; GMat…...
重测序关系矩阵构建方式汇总
样本间亲缘关系矩阵(kinship matrix)和同源性矩阵(IBS matrix)构建的方式 1. 可以使用plink的–make-rel计算个体之间的亲缘关系(强调个体之间的遗传相似性) /opt/software/plink --bfile vcf_bfile--mak…...
OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 制作输入图像的一个副本。请注意,这个副本可能不是实际存在的(没有实际复制数据)。使用此函数来维护图的契约…...
30天通过软考高项-第六天
30天通过软考高项-第六天 任务:项目质量管理 思维导图阅读 知识点集锦阅读 知识点记忆 章节习题练习 知识点练习 手写回忆ITTO 听一遍喜马拉雅关于范围的内容 质量管理 -背 1. 过程定义 龟管控 要求标准规划定,计划转化看过程…...
JUC中各种锁机制的应用和原理及死锁问题定位
JUC中各种锁机制的应用和原理及死锁问题定位 在互联网大厂Java求职者的面试中,经常会被问到关于JUC(Java Util Concurrency)中的各种锁机制及其应用和原理的问题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&…...
区块链vs实体经济:一场金融、医疗、政务与物流的“效率革命”
区块链技术作为一种去中心化、不可篡改的分布式账本技术,正在重塑多个行业的运行模式。从金融交易的透明化到医疗数据的安全共享,从政务服务的效率提升到物流供应链的全程可追溯,区块链的跨行业应用展现出巨大的潜力与价值。以下是其在金融、…...
FTP-网络文件服务器
部署思路 单纯上传下载ftp系统集成间的共享 samba网络存储服务器 NFS 网络文件服务器:通过网络共享文件或文件夹,实现数据共享 NAS ( network append storage):共享的是文件夹 FTP:文件服务器samba:不同系统间的文件…...
嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码)
文章目录 前言一、uC/OS简介二、工程移植2.1 下载ucos源码2.2 创建空白工程2.3 拷贝ucosiii源码文件2.3.1 UC-CONFIG2.3.2 UC-CPU2.3.3 UC-LIB2.3.4 UC-OS3 2.3 添加工程文件分组及路径2.4 代码首次编译2.5 源码修改2.5.1 cpu_cfg.h2.5.2 os_cpu_c.c2.5.3 lib_cfg.h2.5.4 sys.h…...
10.Excel:快速定位目标值
一 批量删除 1.如何使用 快捷键 CTRLG 补充:直接选择定位条件。 2.作用 1.批量删除工作表中的图片 补充:无法通过框选的方式选中这些图片进行删除。 这样只框选了表格,无法框选图片。因为图片在excel中被认为是一个对象,对象无法通…...
状态模式 (State Pattern)
状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。该模式将状态封装成独立的类,并将请求委托给当前的状态对象,当对象的内部状态发生变化时,其行为也会随之改变。 一、基础部分 1. 意图 允许一个…...
【Java面试题04】MySQL 篇
文章目录 一、前言🚀🚀🚀二、MySQL 篇:☀️☀️☀️1、MySQL 是如何实现事务的? 后序还在更新中~~~三、总结:🍓🍓🍓 一、前言🚀🚀🚀 ☀️ 你每一…...
同时安装多个版本的golang
https://golang.google.cn/dl/ go install golang.org/dl/go1.20latest 这样就会将 go1.20.exe 下载到 GOPATH/bin,但是此时并没有 go1.20 的源码包,也就不能正常执行 build/run 等指令。 然后执行 go1.20 download下载源码包 > go1.20 download …...
【Web应用服务器_Tomcat】三、Tomcat 性能优化与监控诊断
在企业级 Java Web 应用的运行过程中,Apache Tomcat 作为广泛使用的 Servlet 容器和 Web 服务器,其性能表现直接影响用户体验和业务稳定性。本篇文章将深入探讨 Tomcat 性能优化的实用技巧,以及如何通过有效的监控诊断手段,及时发…...
stm32week13
stm32学习 九.stm32与HAL库 4.时钟树 stm32f103所拥有的时钟源: 外部时钟的稳定性比内部的高,但是成本高,需要在外部额外接 关于上述时钟树的简图: 右下四个是HAL库中的初始化函数 F4的时钟树简图: F7的时钟树简图…...
深入探究C++ 中的stack、queue和deque
目录 一、stack(栈) 二、queue(队列) 三、deque(双向队列) 四、容器适配器总结 在C 的标准模板库(STL)中,stack、queue和priority_queue是非常实用的容器适配器&…...
第十二节:性能优化高频题-shallowRef/shallowReactive使用场景
适用场景:大型对象/列表仅需第一层响应式变化(如JSON配置数据) Vue3 浅层响应式 API(shallowRef/shallowReactive)使用场景深度解析 一、核心使用场景与性能优化原理 大型 JSON 配置数据管理 • 场景特征:…...