Wykonuję następujące czynności:Dlaczego program Qt przetwarza dane ze schowka po wklejeniu ze schowka do zewnętrznego programu?
1) Skopiuj dane do schowka w moim programie Qt w systemie Windows.
QApplication::clipboard()->setText(data);
2) Wklej dane do zewnętrznego programu (notepad.exe). Po tym czasie mój program rozpoczyna przetwarzanie danych schowka. nazywa to specyficzne metody Windows:
QWindowsOleDataObject::GetData(...);
... QWindowsMimeText::convertFromMime(...);
to jest problem, bo gdy rozmiar danych w schowku jest duża mój program nie działa na pamięci przydziale w tych metod.
Nie mogę zrozumieć, bo stos wywołań jest dość dziwne:
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++
Jest jakiś Qt praca wewnętrzna, nie wiem, jak na niego wpływ.
Dziękujemy! Brzmi logicznie dobrze. Czy to twoja hipoteza, czy działa tak, jak opisałeś? Czy mógłbyś udostępnić link do jakiejś dokumentacji, jeśli masz go? – Deutsche
@Deutsche było założenie oparte na tym, jak to działało jakiś czas temu, patrząc na kod - wydaje się nadal odpowiednie (linki w edytowanej odpowiedzi) – Hcorg
Świetnie! Dziękuję za odpowiedź, wyjaśnia problem. Jeśli jesteś tak doświadczony w tym temacie, może wiesz, jak złapać tę sytuację (bad_alloc w tym kodzie Qt na przetwarzanie zdarzeń) i kontynuować pracę oprogramowania poprawnie? – Deutsche