基于QT-QGraphicsView的网络拓扑图

17 篇文章 6 订阅 ¥119.90 ¥299.90
本文介绍了基于QT的网络拓扑图实现,包括使用QGraphicsView、QGraphicsPixmapItem等自定义绘制拓扑图,实现节点拖动、线条动态移动、放大缩小等功能。此外,还分析了6篇相关博客的优缺点,并提供了完整的代码结构。
摘要由CSDN通过智能技术生成

最近研究制作基于QT的网络拓扑图,目前比较理想的网络拓扑图:

0)到目前为止,自定义制作和实现的传输拓扑图效果

基于QWidget、QGraphicsView、QGraphicsPixmapItem、QGraphicsItem、QDialog等图形基础类,并没有使用设计师视图UI等,而是纯自定义式实现拓扑图效果图。
实现的主要有TopoWidget、TopoView、TopoNode、TopoEdge视图类和EdgeFloatDialog、NodeFloatDialog辅助类。

拓扑图功能
1)搭建拓扑图基本框架;
2)绘制节点,根据节点类型绘制不同图标;
3)绘制节点间连线
4)实现节点图标的动态拖动、线条的动态移动;
5)拓扑图的放大和缩小、保存等;
6)提供左侧图例
7)其他功能待完善

完整代码文件见最后,代码文件7个,可以在自己的项目中灵活引用,包括

1)common.h——node和edge的数据结构

2&#x

Qt中,QGraphicsView是用来显示和处理大型场景的视图类。要实现鼠标绘图,可以通过以下步骤进行: 1. 创建QGraphicsView实例和一个场景(QGraphicsScene)对象,并将场景设置给视图。 2. 创建一个继承自QGraphicsItem的自定义图形项类,用于表示绘图的形状。 3. 在自定义图形项类中,重写mousePressEvent和mouseMoveEvent两个事件处理函数,用于捕捉鼠标按下和移动的事件。 4. 在mousePressEvent中,记录鼠标按下的位置,并创建一个新的图形项对象。 5. 在mouseMoveEvent中,根据鼠标移动的位置,更新图形项对象的形状。 6. 将新创建的图形项对象添加到场景中,并使用QGraphicsScene::addItem()函数进行添加。 7. 最后,将场景设置给QGraphicsView,并调用QGraphicsView::show()函数显示视图。 以下是一个简单示例代码: ```cpp #include <QtWidgets> class CustomGraphicsItem : public QGraphicsItem { public: CustomGraphicsItem() : QGraphicsItem() { setFlag(ItemIsMovable); setAcceptHoverEvents(true); } QRectF boundingRect() const override { return QRectF(0, 0, 100, 100); } void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override { painter->drawEllipse(boundingRect()); } void mousePressEvent(QGraphicsSceneMouseEvent* event) override { if (event->button() == Qt::LeftButton) { QPointF position = event->pos(); qDebug() << "Mouse press at:" << position; } } void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override { setPos(event->pos()); } }; int main(int argc, char* argv[]) { QApplication app(argc, argv); QGraphicsScene scene; QGraphicsView view(&scene); CustomGraphicsItem* item = new CustomGraphicsItem(); scene.addItem(item); view.show(); return app.exec(); } ``` 这是一个简单的绘图程序,可以在视图中点击鼠标左键,然后拖动鼠标绘制一个圆形图形项。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pony12

助力1000篇OpenDDS文

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值