簡體   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