Qt控件拖拽事件
来源:互联网 发布:淘宝查虚假交易时间 编辑:程序博客网 时间:2024/05/13 23:34
http://yamcot.com/qt-drag-drop-event.html
Qt控件拖拽事件
因为编辑器需要在不同的控件之间支持拖拽操作,所以对Qt的拖拽研究了一下. 这里实现一种比较简单的拖拽方案 1.拖拽方控件 其中拖拽模式可查具体的API, 这里设置此空间之支持向外拖拽功能(即只能从此控件向别的控件拖拽操作,而不支持别的控件向此控件拖拽) 然后需要复写startDrag(Qt::DropActions supportedActions)函数来执行开始拖拽时的一些操作. 这里QListWidget支持向外拖拽的功能,其中QMimeData用来再拖拽控件和接受拖拽控件间传输数据,这里我把QListWidgetItem的文本内容作为传输内容发送.并设置了一些限定的属性操作setProperty(这样接受拖拽的控件就可以只接受此控件拖拽来的内容了)构造QDrag对象,并执行拖拽操作. 2.接受拖拽方控件 有几个函数需要复写. 这里主要针对dragEnterEvent来说明 首先从传入的QDragEnterEvent 获取接收到的QMimiData,之后判断这次拖拽是否是需要的拖拽操作, 如果是则event->accept();表明接收此次拖拽事件, 如果不是则调用event->ignore(); 丢弃此次拖拽操作.
拖拽需要支持拖拽的控件开启拖拽功能,调用函数 1
setDragEnabled(
true
);
2
setDragDropMode(QAbstractItemView::DragOnly);
01
void
DragedListWidget::startDrag(Qt::DropActions supportedActions)
02
{
03
QListWidgetItem *item = currentItem();
04
05
QMimeData *mimeData =
new
QMimeData;
06
mimeData->setText(currentItem()->text());
07
// 设置拖拽物体为模型
08
mimeData->setProperty(
"TYPE"
, QVariant(
"MODELS"
));
09
mimeData->setProperty(
"MODEL_TYPE"
, QVariant(mType.c_str()));
10
11
QDrag *drag =
new
QDrag(
this
);
12
drag->setMimeData(mimeData);
13
drag->exec(Qt::MoveAction);
14
}
//当拖拽后进入接收拖拽的控件时触发
1.dragEnterEvent(QDragEnterEvent *event)
//当拖拽(没有释放鼠标时)离开接收拖拽的控件时触发
2.dragLeaveEvent(QDragLeaveEvent *event)
//拖拽状态下在接收拖拽的控件内移动鼠标时触发
3.dragMoveEvent(QDragMoveEvent *event)
//拖拽状态下释放鼠标时触发
4.dropEvent(QDropEvent *event)01
void
OgreWidget::dragEnterEvent(QDragEnterEvent *event)
02
{
03
// 先查看拖拽到场景内的物体是否是模型
04
const
QMimeData *data = event->mimeData();
05
QVariant type = data->property(
"TYPE"
);
06
if
(!mKeyDown && type == QVariant(
"MODELS"
))
07
{
08
QVariant type = data->property(
"MODEL_TYPE"
);
09
//......
10
event->accept();
11
}
12
else
13
event->ignore();
14
}
只有调用event->accept();之后dragLeaveEvent(QDragLeaveEvent *event), dragMoveEvent(QDragMoveEvent *event), dropEvent(QDropEvent *event)才会在之后触发, 如果是event->ignore(); 则均不触发.
Related posts
- 毕业设计
- TankWar V0.1 Published
- Qt中文乱码解决方案
- Tank War
- TankWar系列(一) 基本框架
- TankWar 0.2.1
- OIS CEGUI更改窗口大小解决办法
- Qt控件拖拽事件
- Qt控件拖拽事件
- qt之控件事件接收
- Qt控件及事件处理
- Qt拖拽事件小结
- Qt自定义控件---QLabel点击事件
- Qt重写事件,画图事件,拖拽事件,进入离开事件等
- [QT]拖拽改变控件大小
- 示范如何让QT控件捕捉键盘事件实现快捷键
- QT 中如何关联控件和相应的事件
- 示范如何让QT控件捕捉键盘事件实现…
- QT重写控件函数并添加鼠标单击事件
- Qt: QDropEvent拖拽事件,拖拽打开文件
- Qt加载高德地图,响应地图拖拽事件
- Qt事件
- QT事件
- QT事件
- QT事件
- [转][译]BigPipe:高性能的“流水线技术”网页
- Asynchronous Method Invocation 【翻译】 (五)
- php的autoprepend和autoload功能
- 今天被WINDOWS的防火墙给撞了一下腰,不要告诉我你懂WINDOWS的防火墙!!!!
- 预处理器
- Qt控件拖拽事件
- 分布式文件系统FastDFS架构剖析
- Android MK文件写法
- 视频序列分辨率-视频测试序列的下载地址
- 触摸屏网摘
- Using the internal microphone (M1) and speaker (SPK1) on the DM365 EVM
- “1到10万这些数,去除2个并打乱次序,如何找出那两个数。(不准用位图)”
- 关于Combox的使用总结
- “腾讯服务器每秒有2w个QQ号同时上线,找出5min内重新登入的qq号并打印出来。”