我会做以下事情:
1)在Windows上,在我的Qt程序中将数据复制到剪贴板。
QApplication::clipboard()->setText(data);
2) 将数据粘贴到外部程序(notepad.exe)中。然后我的程序开始处理剪贴板数据。它调用Windows特定的方法:
QWindowsOleDataObject::GetData(...);
... QWindowsMimeText::convertFromMime(...);
这是一个问题,因为当剪贴板中的数据量很大时,我的程序在这些方法中分配内存会失败。
我无法理解它,因为调用栈非常奇怪:
qwindowsd.dll!QWindowsMimeText::convertFromMime(const tagFORMATETC & formatetc, const QMimeData * mimeData, tagSTGMEDIUM * pmedium) Line 606 C++
qwindowsd.dll!QWindowsOleDataObject::GetData(tagFORMATETC * pformatetc, tagSTGMEDIUM * pmedium) Line 144 C++
[External Code]
Qt5Cored.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 740 C++
qwindowsd.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 73 C++
Qt5Cored.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 129 C++
Qt5Cored.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 204 C++
Qt5Cored.dll!QCoreApplication::exec() Line 1188 C++
Qt5Guid.dll!QGuiApplication::exec() Line 1508 C++
Qt5Widgetsd.dll!QApplication::exec() Line 2957 C++
main(int argc, char * * argv) Line 759 C++
这是一些Qt内部工作,我不知道如何对其产生影响。