通过鼠标在 QGraphicsScene 中的位置获取 QGraphicsItem
Get QGraphicsItem by mouse position in QGraphicsScene
我正在尝试通过直线 (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())
但它总是返回 空列表。
编辑:
这就是应用程序应该如何工作,蓝色椭圆是点击端口,现在我应该拖动(仍然是鼠标向下)到另一个端口并释放鼠标。
我用
解决了这个问题
QGraphicsItem *item = scene.itemAt(mapToScene(event->pos()), QTransform());
在函数中mouseReleaseEvent
我正在尝试通过直线 (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())
但它总是返回 空列表。
编辑: 这就是应用程序应该如何工作,蓝色椭圆是点击端口,现在我应该拖动(仍然是鼠标向下)到另一个端口并释放鼠标。
我用
解决了这个问题QGraphicsItem *item = scene.itemAt(mapToScene(event->pos()), QTransform());
在函数中mouseReleaseEvent