拖拽item到其他控件中-QT

图形化界面中经常会用到拖拽生成对象,这样简单又容易理解。我在QCreator中带的例子里面找到了类似的(puzzle),在这里记录一下他的实现思路。

实现效果

  就是把控件直接拖到主界面,随之生成,中间伴有“图片样式的过渡效果”。

拖拽控件  puzzle例子的路径位置是:(your_path)\QT5.9.9\Examples\Qt-5.9.9\widgets\draganddrop\puzzle

例子中函数调用顺序

  PiecesList::startDrag >> PiecesList::dragEnterEvent >> PiecesList::dragMoveEvent >> PuzzleWidget::dragEnterEvent >> PuzzleWidget::dragMoveEvent >> PuzzleWidget::dropEvent;

一些小知识点

  1. startDrag 是重载的 QListView 中的函数,会在 dragEnterEvent 执行,一般在该函数中设置创建 QDrag 对象,设置其携带的 mimeData。
  2. QListWidgetItem::setData(Qt::UserRole, QVariant(pixmap)), 可让一个item携带它自己的数据,自定义的类型需要使用
    Q_DECLARE_METATYPE(MY_TYPE) 进行声明。
  3. QDrag::setPixmap 可以设置拖拽时,出现的图片。在不可释放的区域,鼠标指针还会自动变成一个拒绝的图标,很贴心。
  4. takeItem 的使用,从列表中删除指定行,并且返回其指针,指向内存需要手动释放。(我以前真还没用过这个函数,哈哈!)
  5. QDataStream 内部存储结构应该是队列,遵循先进先出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值