【发布时间】: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