From d7d248a82b4490ebdbfc953256efb03a79d714c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=98=E6=98=A5=E9=98=B3?= <2715725160@qq.com> Date: Thu, 7 Aug 2025 14:25:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8D=E8=83=BD=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- customgraphicsscene.cpp | 12 +++++++----- hmimodule.cpp | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/customgraphicsscene.cpp b/customgraphicsscene.cpp index 2ee0101..e17a2b1 100644 --- a/customgraphicsscene.cpp +++ b/customgraphicsscene.cpp @@ -69,7 +69,9 @@ void CustomGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) } setMode(Normal); - } else { + } + else + { QGraphicsScene::mousePressEvent(mouseEvent); } } @@ -110,8 +112,9 @@ void CustomGraphicsScene::keyPressEvent(QKeyEvent *keyEvent) break; case Qt::Key_V: if (keyEvent->modifiers() & Qt::ControlModifier) { - // 获取最后一个鼠标事件的位置来确定粘贴位置 - emit pasteRequestFromScene(views().first()->mapToScene(views().first()->mapFromGlobal(QCursor::pos()))); + // 使用与 contextMenuEvent 相同的方式获取粘贴位置 + QPointF pastePos = views().first()->mapToScene(views().first()->viewport()->mapFromGlobal(QCursor::pos())); + emit pasteRequestFromScene(pastePos); keyEvent->accept(); } break; @@ -141,8 +144,7 @@ void CustomGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *conte menu.exec(contextMenuEvent->screenPos()); } else { - // 如果点击在图形项上,则将事件传递给该图形项处理 - // (这会调用 HmiComponent::contextMenuEvent) + // 如果点击在图形项上,则将事件传递给该图形项处理(这会调用 HmiComponent::contextMenuEvent) QGraphicsScene::contextMenuEvent(contextMenuEvent); } } diff --git a/hmimodule.cpp b/hmimodule.cpp index ed8b026..554aaee 100644 --- a/hmimodule.cpp +++ b/hmimodule.cpp @@ -117,7 +117,8 @@ void HMIModule::onPasteRequested(const QPointF& scenePos) if (newItem) { newItem->setColor(m_copiedColor); // 为了避免完全重叠,给一个小的偏移量 - newItem->setPos(scenePos + QPointF(10, 10)); + newItem->setPos(scenePos); + m_scene->addItem(newItem); // 使用辅助函数完成添加和信号连接 // 注意:setupNewComponent内部会再次生成“创建”日志,这里是合理的