Расшифруйте перетаскиваемый элемент Qt в не основанное на Qt приложение

Я пытаюсь реализовать функцию перетаскивания между двумя различными приложениями, приложение A полностью создано мной и использует Qt, в то время как приложение B является сторонним приложением, которое не использует Qt, но я написал код плагина, чтобы я мог используйте классы Qt внутри плагина, если это необходимо.

Получить тип данных не так сложно (где pDataObject является IDataObject*):

    std::wstringstream ss;
    IEnumFORMATETC* pEnumFmt;
    // enumerate the available formats supported by the object
    hr = pDataObject->EnumFormatEtc(DATADIR_GET, &pEnumFmt);
    FORMATETC fmtlist;
    TCHAR szBuf[100];
    while (S_OK == pEnumFmt->Next(1, &fmtlist, NULL)) {
        GetClipboardFormatName(fmtlist.cfFormat, szBuf, sizeof(szBuf));
        ss << szBuf << "\n";
    }

И, как и ожидалось, название формата - "application/x-qabstractitemmodeldatalist"

Кажется, все работает хорошо, пока я не хочу получить содержимое этого буфера обмена. Я пытался с помощью

    IDataObject* pDataObj;
    HRESULT hr = OleGetClipboard(&pDataObj); // access the clipboard

    // format characteristics of the data we are after
    FORMATETC fmt = { CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
    STGMEDIUM stgm; // receives the data content
    hr = pDataObj->GetData(&fmt, &stgm);
    if (hr == S_OK) { // CF_TEXT format available
        // we asked for a global memory handle, must lock it for access
        LPCTSTR ptxt = (LPCTSTR)GlobalLock(stgm.hGlobal);
        for (; ++i < nLength && *ptxt;) // copy as much as will fit
            *pszBuf++ = *ptxt++;
        *pszBuf = 0; // ensure terminator

        GlobalUnlock(stgm.hGlobal);
        ReleaseStgMedium(&stgm); // will call GlobalFree
    }

    pDataObj->Release();

и другие решения, такие как использование оригинального FORMATETC, но все это были слепые шаги, так как я действительно не знаю, как с этим справиться.

В прошлом я реализовал перетаскивание между окнами qt, но теперь, используя IDataObject, это кажется намного сложнее.

Заранее благодарю за любой совет!

0 ответов

Другие вопросы по тегам