我在使用拖放和QClipboard的QMimeData方面遇到了问题。 情形:
这允许拖放到文件系统和其他应用程序(例如Powerpoint)。 该实现仅提供必要的数据(例如,文件系统拖动仅需要头部/数据2-5并且拖动到例如Powerpoint仅需要头部/数据1)。没有使用中间文件。
以下列方式构建MIME数据类型(mimeData):
void SCImageWidget::createDragAndDropData(QString mimeType)
{
if(mimeType == "application/x-qt-image" && !mimeData->gotImage)
{
...
QImage img;
this->renderSvgImage(img, ...)
mimeData->setImageData(img);
mimeData->gotImage = true;
...
}
else if(mimeType == "FileName" && !mimeData->gotFileName)
{
QString DDFileName = ... ;
mimeData->setData("FileName", DDFileName.toLatin1());
mimeData->gotFileName = true;
}
else if(mimeType == "FileNameW" && !mimeData->gotFileNameW)
{
QString DDFileName = ... ;
mimeData->setData("FileNameW", QByteArray((const char*) (DDFileName.utf16()), DDFileName.size() * 2));
mimeData->gotFileNameW = true;
}
else if(mimeType == "FileContents" && !mimeData->gotFileContent)
{
...
QByteArray data;
QBuffer buffer(&data);
buffer.open(QIODevice::WriteOnly);
this->renderSvgImageToDevice(buffer, ...);
buffer.close();
mimeData->setData("FileContents", data);
mimeData->gotFileContent = true;
...
}
else if(mimeType == "FileGroupDescriptorW" && !mimeData->gotFileDesc)
{
QString DDFileName = ...;
FILEGROUPDESCRIPTOR desc;
desc.cItems = 1;
desc.fgd[0].dwFlags = FD_PROGRESSUI;
wcscpy_s(desc.fgd[0].cFileName, DDFileName.toStdWString().c_str());
mimeData->setData("FileGroupDescriptorW", QByteArray((const char*)&desc,
sizeof(FILEGROUPDESCRIPTOR)));
mimeData->gotFileDesc = true;
}
return;
}
问题:
问题:对于剪贴板和拖放操作,Windows是否有任何限制(除了典型的剪贴板的1/16 RAM)?我真的找不到关于这个主题的任何好消息。也许任何人都知道Qt中的一些硬编码限制。
系统信息:开发。平台:Win 7 64 / 32GB RAM,Qt 5.3
SSCCE真的不可能 - 抱歉。