我正在尝试创建一个应用程序,该应用程序将通过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 \“”)
如您所见,没有一个名为“地址”的哑剧。
关于如何达到目标的任何建议?
答案 0 :(得分:1)
我建议您使用标准的哑剧类型,例如json
或application/json
(并发送以JSON编码的数据),XML或...
如果您使用自定义的mime类型,则必须忍受Qt更改该mime类型的事实,使其更加符合标准。
只要您停留在一个应用程序中,您的mime类型就不会被触及。
从一个应用程序拖到另一个应用程序后,就需要平台的剪贴板等。 (如果我没记错的话,Windows仅支持某些可能的mime类型。)