【问题标题】:Get QGraphicsItem by mouse position in QGraphicsScene在 QGraphicsScene 中通过鼠标位置获取 QGraphicsItem
【发布时间】:2018-05-03 20:10:04
【问题描述】:

我正在尝试通过 直线 (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()) 但它总是返回空列表

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

【问题讨论】:

  • 选择的项目是圈子,要加入的圈子必须属于不同的端口。我是对的?
  • @eyllanesc 是的,你是对的
  • 块总是由一个矩形和topLeft中的3个圆圈组成?
  • @eyllanesc 现在是的,可以有一到五个端口
  • 我认为我们需要更多信息。这些形状(矩形和圆形)是否聚合在自定义 QGraphicsItem 派生类中?向我们展示实现。我还假设您有自己的类,它继承自 QGraphicsView。这个对吗?它是你处理鼠标事件的地方吗?

标签: c++ qt qgraphicsscene qgraphicsitem


【解决方案1】:

我解决了这个问题

QGraphicsItem *item = scene.itemAt(mapToScene(event->pos()), QTransform());

在函数mouseReleaseEvent

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多