Qt,C++ 在 2 个对象之间绘制连接线

Posted

技术标签:

【中文标题】Qt,C++ 在 2 个对象之间绘制连接线【英文标题】:Qt, C++ Draw Connector line between 2 Objects 【发布时间】:2017-08-15 13:26:49 【问题描述】:

我想在 QGraphicsScene 上使用 mouseClick 在两个矩形之间动态绘制一条线。线不能倾斜。线条的每条线段都必须相互垂直,就像 PowerPoint 中的肘部连接器一样。

如果鼠标向倾斜方向移动,则在绘制线条时线条应自动重新对齐。

如果 QGraphicsLineItem 在场景中绘制,它可以是 1 条直线。我设法做到了这一点,但无法分成 2 个或更多线段。那么我该如何实现呢?

【问题讨论】:

您要查找的术语是 polyline。图中显示的是一条具有三个线段的折线。 您是否真的检查过已经存在的内容。那里有很多教程,包括(如果我没记错的话)Qt 文档本身中的一个带有图表工具的教程。 好的折线是。怎么做..有什么建议吗? 您可以显示您的代码以供参考 动态绘制折线是我无法做到的。使用 QGraphicsLineItem,我可以使用 mouseMoveEvent 动态绘制一条直线。如果我没记错的话,我不能使用 QGraphicsLineItem 构造折线。对吗? 【参考方案1】:

您应该使用自定义绘制功能推出自己的QGraphicsItem

应该比较简单,item就是一个从对象A的连接点到对象B的连接点的矩形。

在这个矩形内,你画了 3 条线,一条从左上角到中上,一条从上中到下,另一条从下中到右下。

【讨论】:

我认为一般的解决方案是正确的,尽管应该考虑一些情况:如果矩形是从右到左,那么线条必须从右上到上中心依此类推...可以不使用矩形的角,而是使用原始点:<src_x, src_y>, <rect.center().x(), src_y>, <rect.center().x(), dst_y>, <dst_x, dst_y>。如果第一行必须是垂直的而不是水平的,则可以以模拟方式完成。 解决方案是针对 OP 特定场景的。在任意位置配置中连接项目肯定需要比这更多的逻辑。

以上是关于Qt,C++ 在 2 个对象之间绘制连接线的主要内容,如果未能解决你的问题,请参考以下文章

如何连接两个程序(c++,qt)

Qt,两个QWidget对象之间的简单连接

QT中如何在不同的.cpp文件中实现信号和槽的连接

如何将信号和插槽与 qt 中的另一个对象连接 - 已解决

Qt之信号槽连接——基于字符串与基于函数的连接之间的不同(译)

Qt 4.8:来自不同线程的两个信号和一个插槽之间的连接行为