#include "manhattanlineitem.h"
ManhattanLineItem::ManhattanLineItem(QPointF start, QPointF end, QGraphicsLineItem *parent) :
QGraphicsLineItem(parent), mStart(start), mEnd(end)
{
// 设置画笔、画刷、包围盒等属性
setZValue(-1);
prepareGeometryChange();
}
QRectF ManhattanLineItem::boundingRect() const
{
qreal minX = qMin(mStart.x(), mEnd.x());
qreal minY = qMin(mStart.y(), mEnd.y());
qreal maxX = qMax(mStart.x(), mEnd.x());
qreal maxY = qMax(mStart.y(), mEnd.y());
return QRectF(minX, minY, maxX - minX, maxY - minY);
}
void ManhattanLineItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setRenderHint(QPainter::Antialiasing, true);
painter->setPen(QPen(Qt::red, 2));
//painter->setBrush(QBrush(Qt::red));
// 计算曼哈顿距离
QPointF delta = mEnd - mStart;
qreal length = qAbs(delta.x()) + qAbs(delta.y());
// 构造QPainterPath对象
QPainterPath path(mStart);
if (delta.x() > 0) {
path.lineTo(mStart.x() + qMin(delta.x(), length / 2), mStart.y());
if (delta.y() > 0) {
path.lineTo(mStart.x() + qMin(delta.x(), length / 2), mEnd.y());
path.lineTo(mEnd.x(), mEnd.y());
}
else {
path.lineTo(mStart.x() + qMin(delta.x(), length / 2), mEnd.y());
path.lineTo(mEnd.x(), mEnd.y());
}
}
else
{
path.lineTo(mStart.x() - qMin(-delta.x(), length / 2), mStart.y());
if (delta.y() > 0) {
path.lineTo(mStart.x() - qMin(-delta.x(), length / 2), mEnd.y());
path.lineTo(mEnd.x(), mEnd.y());
}
else {
path.lineTo(mStart.x() - qMin(-delta.x(), length / 2), mEnd.y());
path.lineTo(mEnd.x(), mEnd.y());
}
}
painter->drawPath(path);
}
void ManhattanLineItem::updateLine(QPointF start, QPointF end)
{
prepareGeometryChange();
mStart = start;
mEnd = end;
}
没有合适的资源?快使用搜索试试~ 我知道了~
QT用QGraphicsLineItem实现曼哈顿连线,直接可以用,方便移植项目
共9个文件
cpp:4个
h:3个
ui:1个
需积分: 14 6 下载量 163 浏览量
2023-03-27
16:46:32
上传
评论 1
收藏 5KB ZIP 举报
温馨提示
QT用QGraphicsLineItem实现曼哈顿连线,直接可以用,方便移植项目。
资源推荐
资源详情
资源评论
收起资源包目录
untitled_manhadun.zip (9个子文件)
untitled_manhadun
mainwindow.h 344B
mainwindow.cpp 832B
untitled_manhadun.pro 1KB
GraphicsView.cpp 570B
main.cpp 183B
mainwindow.ui 558B
manhattanlineitem.h 647B
manhattanlineitem.cpp 2KB
GraphicsView.h 527B
共 9 条
- 1
资源评论
搬砖的日子~
- 粉丝: 6
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功