通过QGraphicsScene中的鼠标位置获取QGraphicsItem

时间:2018-05-02 11:54:05

标签: c++ qt qgraphicsscene qgraphicsitem

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

这是应该连接这些项目的功能。

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

我在一个场景上工作,我遇到了通过鼠标位置找到第二个块的问题。函数mousePressEvent应该使用此代码:

if(event->button() == Qt::MiddleButton)
    Connecting == true;

之后mouseReleaseEvent

if(Connecting)
{
    //Get object by mouse position here
    //this.connectBlocks(..)
    Connecting = false;
}

我尝试了scene->itemsAt(mouse.x(), mouse.y(), QTransform())

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

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

Application image

1 个答案:

答案 0 :(得分:0)

我用

解决了这个问题
QGraphicsItem *item = scene.itemAt(mapToScene(event->pos()), QTransform());

在函数mouseReleaseEvent