繁体   English   中英

如何实现2个应用程序之间的拖放?

[英]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类型,例如jsonapplication/json (并发送以JSON编码的数据),XML或...

如果使用自定义的mime类型,则必须忍受Qt更改该mime类型的事实,以便它更符合标准。

只要您停留在一个应用程序中,您的mime类型就不会受到影响。

从一个应用程序拖到另一个应用程序后,就需要平台的剪贴板等。 (如果我没记错的话,Windows仅支持某些可能的mime类型。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM