From f4be691783face4ed5d81501b9c4c6dbba87a63f Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Mon, 8 Jun 2026 14:24:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=96=AD=E5=B1=82=E3=80=81=E8=A3=82?= =?UTF-8?q?=E7=BC=9D=E3=80=81=E5=8C=BA=E5=9F=9F=E3=80=81=E5=A4=9A=E8=BE=B9?= =?UTF-8?q?=E5=BD=A2=E3=80=81=E7=9F=A9=E5=BD=A2=E5=92=8C=E5=9C=86=E5=BD=A2?= =?UTF-8?q?=E5=9B=BE=E5=85=83=E7=9A=84=E5=8F=8C=E5=87=BB=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Src/nmNum/nmPlot/nmObjLineCrackTool.cpp | 9 +++++++-- Src/nmNum/nmPlot/nmObjLineFaultTool.cpp | 9 +++++++-- Src/nmNum/nmPlot/nmObjPolygonTool.cpp | 5 +++-- Src/nmNum/nmPlot/nmObjRectTool.cpp | 12 +++++++++++- Src/nmNum/nmPlot/nmObjRegionTool.cpp | 12 ++++++++++-- Src/nmNum/nmPlot/nmObjRoundTool.cpp | 12 +++++++++++- 6 files changed, 49 insertions(+), 10 deletions(-) diff --git a/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp b/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp index b783dff..495f4cb 100644 --- a/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp +++ b/Src/nmNum/nmPlot/nmObjLineCrackTool.cpp @@ -1,4 +1,4 @@ -#include +#include #include "ZxBaseUtil.h" #include "ZxObjBase.h" @@ -113,9 +113,14 @@ bool nmObjLineCrackTool::onLeftDoubleClick(const QPointF& pt) { if (NULL == m_pObj) // 绘图对象尚未创建(鼠标选点ing) { + // 点数不足时吞掉双击,避免误结束创建流程。 + if (m_vecPoints.count() < 2) { + return true; + } + changeCursor(Qt::ArrowCursor); emit sigPtsFinished(m_vecPoints); - //m_vecPoints.clear(); + m_vecPoints.clear(); //m_vecCurAllPts.clear(); if (m_bTracking) diff --git a/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp b/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp index 870a2bc..042eb46 100644 --- a/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp +++ b/Src/nmNum/nmPlot/nmObjLineFaultTool.cpp @@ -1,4 +1,4 @@ -#include +#include #include "ZxBaseUtil.h" #include "ZxObjBase.h" @@ -103,9 +103,14 @@ bool nmObjLineFaultTool::onLeftDoubleClick(const QPointF& pt) { nmObjLineFault* pObj = dynamic_cast(m_pObj); if(NULL == pObj) { // 绘图对象尚未创建(鼠标选点ing) + // 点数不足时吞掉双击,避免误结束创建流程。 + if (m_vecPoints.count() < 2) { + return true; + } + changeCursor(Qt::ArrowCursor); emit sigPtsFinished(m_vecPoints); - //m_vecPoints.clear(); + m_vecPoints.clear(); //m_vecCurAllPts.clear(); if(m_bTracking) { diff --git a/Src/nmNum/nmPlot/nmObjPolygonTool.cpp b/Src/nmNum/nmPlot/nmObjPolygonTool.cpp index a4008e8..11451ef 100644 --- a/Src/nmNum/nmPlot/nmObjPolygonTool.cpp +++ b/Src/nmNum/nmPlot/nmObjPolygonTool.cpp @@ -92,8 +92,9 @@ bool nmObjPolygonTool::onLeftDoubleClick(const QPointF& pt) { if (nullptr == m_pObj) //绘图对象尚未创建(鼠标选点ing) { - if (m_vecPoints.count() < 2) { - return nmObjToolBase::onLeftDoubleClick(pt); + // 多边形至少需要 3 个点才能闭合成有效面,点数不足时吞掉双击。 + if (m_vecPoints.count() < 3) { + return true; } changeCursor(Qt::ArrowCursor); diff --git a/Src/nmNum/nmPlot/nmObjRectTool.cpp b/Src/nmNum/nmPlot/nmObjRectTool.cpp index f0bce64..da78615 100644 --- a/Src/nmNum/nmPlot/nmObjRectTool.cpp +++ b/Src/nmNum/nmPlot/nmObjRectTool.cpp @@ -81,6 +81,15 @@ bool nmObjRectTool::onLeftUp(const QPointF& pt) getView()->setCursorKeeping(false); changeCursor(Qt::ArrowCursor); + // 矩形依赖拖拽成形,起点和终点过近时取消本次创建,避免双击或误点生成零尺寸图元。 + double dDistance = 2.2f; + if ((qAbs(m_ptStart.x() - pt.x()) < dDistance) && + (qAbs(m_ptStart.y() - pt.y()) < dDistance)) { + m_vecPoints.clear(); + m_bTracking = false; + return true; + } + // 保存其余三个点的坐标 m_ptMove = pt; QPointF m_ptOne(m_ptMove.x(), m_ptStart.y()), @@ -126,7 +135,8 @@ bool nmObjRectTool::onLeftDoubleClick(const QPointF& pt) { nmObjRect* pObj = dynamic_cast(m_pObj); if(NULL == pObj) { // 绘图对象尚未创建(鼠标选点ing) - return false; + // 矩形创建不依赖双击收尾,创建态直接吞掉双击事件。 + return true; } else { // 已绑定绘图对象 // 双击内部,取消选中状态 diff --git a/Src/nmNum/nmPlot/nmObjRegionTool.cpp b/Src/nmNum/nmPlot/nmObjRegionTool.cpp index e5bb5ac..5dc98c5 100644 --- a/Src/nmNum/nmPlot/nmObjRegionTool.cpp +++ b/Src/nmNum/nmPlot/nmObjRegionTool.cpp @@ -95,16 +95,24 @@ bool nmObjRegionTool::onLeftUp(const QPointF& pt) bool nmObjRegionTool::onLeftDoubleClick(const QPointF& pt) { if(NULL == m_pObj) { + // 区域至少需要 3 个点才能闭合成有效面,点数不足时吞掉双击。 + if (m_vecPoints.count() < 3) + { + return true; + } + changeCursor(Qt::ArrowCursor); emit sigPtsFinished(m_vecPoints); m_vecPoints.clear(); - if(m_bTracking) { + if(m_bTracking) + { m_bTracking = false; } - return false; + // 双击已完成本工具的处理,这里直接消费事件。 + return true; } else { return nmObjToolBase::onLeftDoubleClick(pt); } diff --git a/Src/nmNum/nmPlot/nmObjRoundTool.cpp b/Src/nmNum/nmPlot/nmObjRoundTool.cpp index 5a455a6..9bf0c58 100644 --- a/Src/nmNum/nmPlot/nmObjRoundTool.cpp +++ b/Src/nmNum/nmPlot/nmObjRoundTool.cpp @@ -60,6 +60,15 @@ bool nmObjRoundTool::onLeftUp(const QPointF& pt) getView()->setCursorKeeping(false); changeCursor(Qt::ArrowCursor); + // 圆形依赖拖拽成形,起点和终点过近时取消本次创建,避免双击或误点生成零尺寸图元。 + double dDistance = 2.2f; + if ((qAbs(m_ptStart.x() - pt.x()) < dDistance) && + (qAbs(m_ptStart.y() - pt.y()) < dDistance)) { + m_vecPoints.clear(); + m_bTracking = false; + return true; + } + // 计算圆心的位置 m_ptMove = pt; QPointF m_ptCenter((m_ptStart.x() + m_ptMove.x()) / 2,(m_ptStart.y() + m_ptMove.y()) / 2); @@ -103,7 +112,8 @@ bool nmObjRoundTool::onLeftUp(const QPointF& pt) bool nmObjRoundTool::onLeftDoubleClick(const QPointF& pt) { if(NULL == m_pObj) { // 绘图对象尚未创建(鼠标选点ing) - return false; + // 圆形创建不依赖双击收尾,创建态直接吞掉双击事件。 + return true; } else { // 已绑定绘图对象 // 双击内部,取消选中状态