Qt边界矩形/形状的项目交互

Qt bounding rect / shape for item interaction

本文关键字:项目 交互 边界 Qt      更新时间:2023-10-16

我正在做一个Qt程序,我有矩形与电线连接(由用户放置鼠标事件)。每根电线检查是否有一个矩形在它的开始和结束。如果是,则电线已放置。

我最近想把我的矩形变成水平线(更好的视觉效果),所以我写:

QRectF myRect(-15, 0, 30, 1);

而不是常规的rect,问题是现在很难跟踪我的连线,因为用户必须用鼠标连接两行,这几乎是不可能的。

我试图改变边界矩形/形状,但没有一个工作:

QRectF Port::boundingRect()
{
    return QRectF(-15, 0, 30, 10);
}
QPainterPath Port::shape()
{
    QPainterPath path;
    path.addRect(-15, 0, 30, 10);
    return path;
}

我认为问题在于边界矩形&形状仅用于选择。我也尝试过使用图像(绝望的解决方案),但我找不到一种方法来添加图像/像素图到我的QpainterPath。

我知道我可以用直线代替平面矩形,但是问题还是一样的。

谢谢你的帮助

  1. 使用QPainterPath作为复选框,正如你所提到的
  2. 得到QPointF中导线的终点(两点)

  3. 使用bool QPainterPath::contains(const QPointF & point)检查导线是否在QPainterPath内(两次检查导线的起点和终点)

或者在拖放有线图像的情况下,

  1. 使用QPainterPath作为复选矩形
  2. 如果wire是一个图像,使用QPixMap::rect()获取wire的QRect
  3. 使用bool QPainterPath::contains(const QRectF & rectangle)检查线路是否在QPainterPath