QTreeWidget实现元素拖拽移动,并绘制插入点

该博客详细介绍了如何在QTreeWidget中实现拖放功能,包括启用拖放操作、设置拖放模式以及绘制拖动过程中指示插入位置的线。通过重写dragEnterEvent、dragMoveEvent、dropEvent等方法,实现元素移动并更新其在树形视图中的位置。此外,还展示了如何绘制三角形指示插入点。
摘要由CSDN通过智能技术生成
#include "ctreewidget.h"
#include <QMouseEvent>
#include <QPainter>

#define BM_ICON_WIDTH 22

CTreeWidget::CTreeWidget(QWidget *parent) :
    QTreeWidget(parent),m_child(true),m_newLine(QLine()), m_oldLine(QLine())
{
    this->setSelectionMode(QAbstractItemView::SingleSelection);
    //启用拖放
    this->setDragEnabled(true);
    //设置拖放
    setAcceptDrops(true);
//    this->viewport()->setAcceptDrops(true);
    //设置显示将要被放置的位置
    this->setDropIndicatorShown(true);
//    //设置拖放模式为移动项目,否则为复制项目
    this->setDragDropMode(QAbstractItemView::InternalMove);
    this->setAttribute(Qt::WA_PaintOutsidePaintEvent);
}

void CTreeWidget::dragEnterEvent(QDragEnterEvent *event)
{
    if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist"))
        event->accept();
    else
        event->ignore();
}

void CTreeWidget::dragMoveEvent(QDragMoveEvent *event)
{
    if (event->mimeData()
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值