[英]How to implement drag&drop between 2 applications?
我正在尝试创建一个应用程序,它将通过QLocalServer
/ QLocalSocket
通信。 我计划使用拖放机制实现服务器名称传递机制。 该机制如下所示:
QLocalServer
在一个应用程序,并QLocalSocket
在另一方面, QMimeData
传递地址, 我已经实现了一些代码,但是看来,应用程序之间的拖放对mimeData
对象进行了一些更改。 以下是代码片段以及我得到的结果:
mouseMoveEvent(QMouseEvent* event)
{
if (!__drag_options.__drag_started)
return;
if (distance(__drag_options.__drag_started_position, event->pos()) < DRAG_DISTANCE)
return;
QDrag drag(this);
QMimeData* mimeData = new QMimeData;
mimeData->setData("type", "pin");
mimeData->setData("address", __address);
drag.setMimeData(mimeData);
drag.exec(Qt::MoveAction);
}
dropEvent(QDropEvent* event)
{
qDebug() << "dropEvent " << event->mimeData()->formats();
const QMimeData* mime = event->mimeData();
QString serverName = mime->data("pin_name");
__socket->connectToServer(serverName);
}
结果是
dragEnterEvent(“ application / x-qt-windows-mime; value = \\” type \\“”,“ application / x-qt-windows-mime; value = \\” address \\“”)
如您所见,没有一个名为“地址”的哑剧。
关于如何达到目标的任何建议?
我建议您使用标准的mime类型,例如json
或application/json
(并发送以JSON编码的数据),XML或...
如果使用自定义的mime类型,则必须忍受Qt更改该mime类型的事实,以便它更符合标准。
只要您停留在一个应用程序中,您的mime类型就不会受到影响。
从一个应用程序拖到另一个应用程序后,就需要平台的剪贴板等。 (如果我没记错的话,Windows仅支持某些可能的mime类型。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.