在Qt中拖放多个对象
Drag and Drop multiple Objects in Qt
我可以成功地将拖动对象拖放到任何应用程序,但拖动多个项目的正确方法是什么?
//Create Drag Object
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
QImage myImage = QImage(currentPath);
drag->setPixmap(QPixmap::fromImage(myImage, Qt::AutoColor));
//Send Source File to Target Application
mimeData->setText(this->getPathToSource());
drag->setMimeData(mimeData);
//Start drag/drop operation
drag->exec();
剪贴板一次只能包含一个对象。但是这个对象可以用不同的格式存储。
例如,文档可以同时存储为文本、HTML和Doc。
当您在应用程序上移动拖动光标时,它会检查是否可以使用可用的格式和(很少)数据来放置对象。
如果需要拖动多个对象,则需要使用mimeData->setData(mimeType, data)
将描述对象的数据放置在剪贴板中
其中mimeType
是唯一的QString
,例如"mydatatype"
CCD_ 4是具有关于对象(或对象内容)的信息的CCD_。例如,QStringList
可以存储如下:
QStringList list;
mimeData->setData("myapplication::stringlist", list.join(",").toUtf8());
这里是反序列化:
if (mimeData->hasFormat("myapplication::stringlist"))
{
QStringList list = QString::fromUtf8(mimeData->data("myapplication::stringlist")).split(",");
}
当然,您将无法在另一个(而不是您的)应用程序中丢弃此类数据。
编辑:
当您从Windows资源管理器拖动文件时,它会将文件的路径放置在剪贴板中
因此,如果你想拖动2个图像,你必须将它们保存在一个临时文件夹中才能使用这种方式。
Windows资源管理器将一些mime类型放入剪贴板。我认为你可以使用的是text/uri-list
。这是一个文件名列表。每个文件名的格式都是file:///path
。每个文件名都从一个新行开始。
相关文章:
- 在组合框中拖放项目
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 拖放我的MDI被CRichEditView拦截并在CRichEditView::GetDocument中崩溃 - 如何覆
- 在特定区域拖放 | Qt
- Qt - 在QGraphicScene中拖放时如何从项目中获取文本?
- Qt 模型拖放 - 无法保存类型 QJsonValue
- 如何在 2 个应用程序之间实现拖放?
- 在拖放 QML 列表中插入/删除项目使用 cpp 模型查看
- UI具有拖放功能
- 如何使用拖放功能和点击信号函数QT创建标签
- 使用MFC在对话框上拖放文件
- QListWidget通过setItemWidget使用自定义小部件集进行拖放
- 将拖放连接到QListWidget中的函数的最佳方法
- QTextEdit-根据QCursor位置进行条件拖放
- 如果使用Qt::DecorationRole,则在拖放时崩溃
- 用代码模拟窗口拖放
- Ole 拖放故障排除
- 基于文本的角色扮演游戏拖放和保留物品功能
- QT - 拖放 - 在自定义场景上创建自定义图形对象的位置
- 在Qt中拖放多个对象