博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt获取多边形(QGraphicsPolygonItem)或Qt图形组件与直线(QLineF)的交点 - 推酷
阅读量:7098 次
发布时间:2019-06-28

本文共 1863 字,大约阅读时间需要 6 分钟。

有时需要获取直线与各种图形的交点,包括多边形和各种Qt图形框。

例如上图中,要想使连接线始终在多边形的边上,且能指向多边形中心,那么我们就要获取连线AB与多边形的交点。

1.多边形(QGraphicsPolygonItem)与直线(QLineF)的交点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//已知点和多边形//A、B点可通过多边形的boundingRect().width()/2获取;
QPointF A;
QPointF B;
QGraphicsPolygonItem yellowItem;
  
QLineF lineAB(A,B);
//AB连线QPointF arrowPoint; //设置交点
QPolygonF yellowtPolygon = yellowItem->polygon();
QPointF p1 = yellowtPolygon.first() + yellowItem->pos();
//遍历各边连线for (int i = 1; i < yellowtPolygon.count(); ++i) { QPointF p2 = yellowtPolygon.at(i) + yellowItem->pos();
QLineF polyLine = QLineF(p1, p2);
  
//核心:判断是否相交 QLineF::IntersectType intersectType = polyLine.intersect(lineAB, &arrowPoint); if (intersectType == QLineF::BoundedIntersection) break;
p1 = p2;
}
  
//arrowPoint 即为交点

从上面代码可以看到,一个多边形和直线的交点的实现,就是遍历直线与所有边的联系,推而广之,所有Qt的图形化组件,比如QPushButton,QQGraphicsTextItem等,只要有边界的图形化组件都能获取其与直线的交点。即遍历所有边与直线的交点即可。

2.Qt图形组件与直线(QLineF)的交点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
QPointF A;
QPointF B;
QLineF lineAB(A,B);
//AB连线
Q普通组件 m_CommentItem;
  
qreal commentWidth  = m_CommentItem->boundingRect().width();
qreal commentHeight = m_CommentItem->boundingRect().height();
  
QPointF intersectPoint;
//四个边-四条线QLineF line1(0,0,commentWidth,0
);
QLineF line2(
0,0,0
,commentHeight);
QLineF line3(commentWidth,
0
,commentWidth,commentHeight);
QLineF line4(
0
,commentHeight,commentWidth,commentHeight);
QList<QLineF> lineList;
lineList.append(line1);
lineList.append(line2);
lineList.append(line3);
lineList.append(line4);
  
//遍历四条线foreach
(QLineF oneline,lineList)
{
QLineF::IntersectType intersectType = oneline.intersect(lineAB, &intersectPoint);
if
(intersectType == QLineF::BoundedIntersection)
break
;
}
  
//intersectPoint 即为交点

3.可参考例子:

Qt Examples and Demos -> Graphics View ->Diagram Scene

转载于:https://www.cnblogs.com/superit/p/3831808.html

你可能感兴趣的文章
Oracle锁总结
查看>>
svn3.0版修正版
查看>>
数据中心呈现勃勃生机 中国市场将达190亿规模
查看>>
第一单元练习题
查看>>
马哥linux高薪中级-web服务器(续二)
查看>>
如何使用LDAP用户单点登录到Horizon桌面和应用
查看>>
关于tomcat和jetty对比(不喜欢jetty的勿看)
查看>>
Python的垃圾回收机制
查看>>
zabbix 布署实践【1 server安装】
查看>>
LINUX REDHAT第六单元文档
查看>>
python实现手机号归属地相关信息查询
查看>>
FastJson的简单使用
查看>>
带你走进神经网络的“前世今生”
查看>>
【学神-RHEL7】RHEL7.1安装步骤详解
查看>>
CIFS NFS
查看>>
网络IO模型的深入浅出
查看>>
Nagios 3 & Centreon 2 RC5 安装与配置(2)
查看>>
随机字符串生成算法
查看>>
Jenkins重置安全配置
查看>>
mahout0.7 示例运行纪实
查看>>