Qt树形结构的拖拽

记录下最近处理Qt树形结构的过程

由于对于树形机构item的处理较为复杂,因此采用QTreeView来制作树形结构。

对于事件和界面的绘制主要在delegate中完成,由于实现setStyleSheet,所以delegate继承了QStyledItemDelegate。

提一点事件要小心返回值,有时候需要return false 因为后面Qt还有部分针对item选中显示刷新的操作。


做到拖拽时,第一反应是在delegate的editorEvent中完成,但个人觉得delegate是独立的针对单个item

(大部分API传入的参数都有const QModelIndex &index,index与item是一一对应的),因此测试了一下继承QTreeView

,在里面加入drag与drop事件(毕竟往上倒三代也是继承自QWidget)。经测试果然可以响应以下四个事件

    void dragEnterEvent( QDragEnterEvent* event );
    void dragLeaveEvent( QDragLeaveEvent* event );
    void dragMoveEvent( QDragMoveEvent* event );
    void dropEvent( QDropEvent* event );
其中也出现了些问题

void TreeView::dragEnterEvent( QDragEnterEvent* event )
{
    qDebug()<<"dragEnterEvent";
    //event->setAccepted(true);不加这一行不管往哪儿拖都是禁止的符号,且 不能接收dropEvent
}

void TreeView::dragMoveEvent( QDragMoveEvent* event )
{
    qDebug()<<"dragMoveEvent";
    //return QTreeView::dragMoveEvent(event );不加这一行往哪儿拖都是允许(树形结构一般不能向自己子类拖动)。为了这个百度了半天没解决,最后随意尝试了一下居然成功了
}
当然其实你也可以不写

    void dragLeaveEvent( QDragLeaveEvent* event );
    void dragMoveEvent( QDragMoveEvent* event );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值