[Qt]Qt--拖拽实现
来源:互联网 发布:贪心算法实例 编辑:程序博客网 时间:2024/05/19 00:51
项目里的需求是从Qlistwidget拖拽到另一个QlistView上,并且在Qlistwidget内不可拖动元素。
1 Qlistwidget内不可拖动元素,可以重写dropEvent事件。
void MTListWidget::dropEvent( QDropEvent *event )
{
if (event->source() == this) //不允许本控件内拖动
event->ignore();
else
event->accept();
}
2 从Qlistwidget拖拽到另一个QlistView
我在startDrag中添加了在拖拽过程中要传送的data数据,用于传输给QlistView
void MTListWidget::startDrag( Qt::DropActions supportedActions )
{
Q_UNUSED(supportedActions);
QList <QListWidgetItem*> items ;//注意 items是个Qlist 其中的元素是QListWidgetItem
items=selectedItems();
QString fileNames;
if(items.size()==0)
{
return;
}
else
{
QString filetype = items[0]->data(Qt::UserRole+1).toString(); //获取拖放的文件类型
fileNames += filetype;
fileNames += "\n";
for(int i =0; i<items.size(); i++)//遍历所选的ITEM
{
QListWidgetItem*sel = items[i];
QString strName = sel->data(Qt::UserRole).toString(); // 获取全路径
fileNames += strName;
fileNames += "\n";
}
}
QByteArray fileData;
fileData = QVariant(fileNames).toByteArray();
QMimeData *mimeData = new QMimeData;
mimeData->setData("application/x-qabstractitemmodeldatalist", fileData);
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->exec(Qt::CopyAction);
}
3QlistView接收
使用的eventFiler截获drop事件,使用m_listView->viewport()来注册事件过滤器。
if (object == m_listView->viewport())
{
if(event->type() == QEvent::Drop)//实现拖放
{
QAbstractItemView* source = qobject_cast<QAbstractItemView *>(((QDropEvent *)event)->source());
const QMimeData *mime = ((QDropEvent *)event)->mimeData();
QByteArray encodedata = mime->data("application/x-qabstractitemmodeldatalist");
if (source && source != m_listView) //QlistWidget向Qlistview拖动
{
//do something
return true; //一定要返回
}
else if(source && source == m_listView)Qlistview内部拖动
{
if (encodedata.isEmpty()) //判空
{
return false;
}
//do something
return true;
}
}
}
- [Qt]Qt--拖拽实现
- Qt QListWidget拖拽实现
- Qt实现不同Treewidget之间拖拽
- Qt窗体拖拽的实现方法
- Qt实现用鼠标拖拽对话框
- Qt实现拖拽数据的功能
- Qt自定义标题栏并实现拖拽
- Qt实现窗口整体拖拽功能.
- 【QT】:QT实现登录界面
- QT拖拽功能
- Qt 拖拽问题
- QT
- QT
- QT
- Qt
- qt
- QT
- QT
- Linux子进程创建
- java线程学习之Condition
- python开发虚拟环境搭建步骤
- Android 消息机制
- 详解设计模式——外观模式
- [Qt]Qt--拖拽实现
- xcodebuild和xcrun实现自动打包iOS应用程序
- BZOJ 1588 营业额统计(TREAP)
- ffplay音视频同步分析(一)
- java多线程学习之Condition,实现唤醒指定的部分线程
- TensorFlow学习笔记(八): Google 的开源技术protobuf 简介
- at java.io.ObjectOutputStream.writeObject0(Unknown Source)
- C++学习(21)
- HTC Link是仅适用于日本的6DOF VR头显