通过QGraphicsScene中鼠标位置获取QGraphicsItem

Bry*_*kyz 3 c++ qt qgraphicsitem qgraphicsscene

QGraphicsItems我试图用直线( )连接两个QGraphicsLineItem;通过在第一个对象上单击鼠标中键,然后将鼠标悬停在第二个对象上,释放它后,它应该在它们之间画线。

这是应该连接这些项目的函数。

void GraphicsBlock::connectBlocks(GraphicsBlock *block)
{
    GraphicsConnect *connection = new GraphicsConnect(); //Class with QGraphicsLineItem
    connection->line->setLine(QLineF(this->pos(), block->pos()));
}
Run Code Online (Sandbox Code Playgroud)

我正在处理一个场景,但在通过鼠标位置查找第二个块时遇到问题。函数mousePressEvent 应该与此代码一起使用:

if(event->button() == Qt::MiddleButton)
    Connecting == true;
Run Code Online (Sandbox Code Playgroud)

在那之后mouseReleaseEvent

if(Connecting)
{
    //Get object by mouse position here
    //this.connectBlocks(..)
    Connecting = false;
}
Run Code Online (Sandbox Code Playgroud)

我尝试scene->itemsAt(mouse.x(), mouse.y(), QTransform())过并且

scene->items(QPointF(mouse.x(),mouse.y())但它总是返回空列表

编辑:这就是应用程序应该如何工作,蓝色椭圆被单击端口,现在我应该拖动(仍然按下鼠标)到另一个端口并释放鼠标。

应用图片

Bry*_*kyz 5

我解决了这个问题

QGraphicsItem *item = scene.itemAt(mapToScene(event->pos()), QTransform());
Run Code Online (Sandbox Code Playgroud)

在功能上mouseReleaseEvent