Qt模仿visionpro显示算子输入输出关系图(重写QTreeWidget和QTreeWidgetItem实现)(拖动Item移动位置或绑定输入输出关系)

在qtreewieget中实现右击菜单,用qtreewidget模仿visionpro实现算子输入输出关系显示,拖动Item变换当前位置或绑定输入输出关系,如下图:

拖动item移动算子位置同时更新输入输出箭头位置,如下图:

qt实现按住Ctrl+F键来搜索树中的算子名,若搜索到,则高亮显示

源码连接:https://download.csdn.net/download/weixin_43935474/87663546?spm=1001.2014.3001.5501

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个功能可以通过自定义一个继承自QTreeWidget的类来实现,具体步骤如下: 1. 创建一个新的类,例如MyTreeWidget,继承自QTreeWidget。 2. 在MyTreeWidget类中添加需要的成员变量和函数,例如: ``` private: QTreeWidgetItem *m_dragItem; // 用于记录被拖动item bool m_isDragging; // 标记是否正在进行拖动操作 void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void dropEvent(QDropEvent *event) override; ``` 其中,mousePressEvent()函数用于处理鼠标按下事件,记录被拖动item;mouseMoveEvent()函数用于处理鼠标移动事件,实现拖动操作;dropEvent()函数用于处理鼠标放开事件,实现拖放操作。 3. 在MyTreeWidget类的构造函数中设置一些属性,例如: ``` MyTreeWidget::MyTreeWidget(QWidget *parent) : QTreeWidget(parent) { setDragEnabled(true); // 允许拖动 setAcceptDrops(true); // 允许放置 setDefaultDropAction(Qt::MoveAction); // 设置默认的拖放行为为移动 } ``` 4. 实现mousePressEvent()函数,记录被拖动item: ``` void MyTreeWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_dragItem = itemAt(event->pos()); // 记录被拖动item m_isDragging = true; // 标记开始拖动 } } ``` 5. 实现mouseMoveEvent()函数,实现拖动操作: ``` void MyTreeWidget::mouseMoveEvent(QMouseEvent *event) { if (m_isDragging && m_dragItem) { QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; mimeData->setText(m_dragItem->text(0)); // 设置拖动数据 drag->setMimeData(mimeData); drag->setPixmap(QPixmap(":/icons/drag.png")); // 设置拖动标 drag->exec(Qt::MoveAction); // 开始拖动 } } ``` 6. 实现dropEvent()函数,实现拖放操作: ``` void MyTreeWidget::dropEvent(QDropEvent *event) { QTreeWidgetItem *targetItem = itemAt(event->pos()); // 获取放置位置item if (targetItem) { QString text = event->mimeData()->text(); // 获取拖动数据 QTreeWidgetItem *dragItem = new QTreeWidgetItem(targetItem); dragItem->setText(0, text); // 创建新的item并设置文本 if (event->dropAction() == Qt::MoveAction) { delete m_dragItem; // 删除原来的item } } m_isDragging = false; // 标记拖动结束 } ``` 7. 最后,在MainWindow中使用MyTreeWidget替换原来的QTreeWidget即可。 注意:上述代码仅是示例代码,具体实现还需要根据实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GreenHandBruce

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值