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

3

我正在尝试通过直线QGraphicsLineItem)将两个QGraphicsItems连接起来;当我在第一个对象上使用中间鼠标按钮点击,然后悬停在第二个对象上并释放时,它应该在它们之间绘制一条线。

这是用于连接这些项的函数。

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


被选中的项是圆圈,而加入的圆圈必须属于不同的端口。我说得对吗? - eyllanesc
@eyllanesc 是的,你是对的。 - Brykyz
这些块始终由一个矩形和3个圆形组成,位于左上角吗? - eyllanesc
@eyllanesc 目前可以有1到5个端口。 - Brykyz
我认为我们需要更多关于此事的信息。这些形状(矩形和圆形)是否聚合在自定义的QGraphicsItem派生类中?请展示实现细节。我还假设您拥有自己的类,该类继承自QGraphicsView。这是正确的吗?这是您处理鼠标事件的地方吗? - Dusteh
1个回答

5
我用以下方法解决了这个问题:
QGraphicsItem *item = scene.itemAt(mapToScene(event->pos()), QTransform());

mouseReleaseEvent函数中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接