DiagramDesigner/source/locateNode.cpp

37 lines
1.1 KiB
C++
Raw Normal View History

2024-12-03 20:07:25 +08:00
#include "locateNode.h"
#include <QtCore/QList>
#include <QtWidgets/QGraphicsScene>
#include "nodeGraphicsObject.h"
NodeGraphicsObject *locateNodeAt(QPointF scenePoint,
QGraphicsScene &scene,
QTransform const &viewTransform)
{
// items under cursor
QList<QGraphicsItem *> items = scene.items(scenePoint,
Qt::IntersectsItemShape,
Qt::DescendingOrder,
viewTransform);
// items convertable to NodeGraphicsObject
std::vector<QGraphicsItem *> filteredItems;
std::copy_if(items.begin(),
items.end(),
std::back_inserter(filteredItems),
[](QGraphicsItem *item) {
return (qgraphicsitem_cast<NodeGraphicsObject *>(item) != nullptr);
});
NodeGraphicsObject *node = nullptr;
if (!filteredItems.empty()) {
QGraphicsItem *graphicsItem = filteredItems.front();
node = dynamic_cast<NodeGraphicsObject *>(graphicsItem);
}
return node;
}