Unser Team entwickelt eine komplexe Anwendung mit Qt 4.7.4. Eine der von uns bereitgestellten Schlüsselfunktionen erfordert HTML- und JS-Inhalte, die von QWebBrowser gerendert werden.Standardfenster zum Öffnen/Speichern wird durch WebKit unterbrochen
Das Problem ist, dass das Laden von einigen Seiten führt zu den aufgebrochenen/Speichern-Dialoge:
Der Dialog nach wie vor „Werke“ in Bezug auf die Interaktion: die Dateifilter Combobox geöffnet werden kann, Datei Name kann eingegeben werden, aber das alles wird falsch gezeichnet. Dateiliste und Verzeichnisbaum werden überhaupt nicht gezeichnet.
Ich habe keine Bugreports zu diesem Problem auf Qt Bug Tracker und Google gefunden. Wir haben entschieden, dass das Problem lokal für unser Projekt ist. Wir nehmen an, dass einige interne comctl32.dll-Strukturen durch die Schreiboperation einer Person in eine ungültige Adresse ruiniert werden, aber wir haben keine Ahnung, wie wir den wahren Grund finden. Es ist auch erwähnenswert, dass dieses Problem nicht mit Qt 5.4 und auf jeder Version von Windows weniger als 8.0 erscheint. Leider sollten wir die nächste Version noch auf Qt 4.8 erstellen (das Projekt ist riesig, der Upgrade-Prozess benötigt viel Zeit).
Wie ein solches Problem kann debuggt werden? Welche Speicheroperationen und/oder WinAPI-Aufrufe sollten angehängt werden? Irgendwelche Ideen werden sehr geschätzt.
Die Toolchain ist MSVC 9.0 (VS 2008)
Wenn Sie möchten, dass Qt 4.7 unter Windows 8 oder höher funktioniert, müssen Sie es selbst pflegen (oder einen benutzerdefinierten Vertrag dafür kaufen). Sie könnten comctl32.dll entladen und neu laden, wenn möglich. Am wichtigsten ist jedoch, dass dies entweder auf einen Qt-Speicherfehler oder (wahrscheinlich) auf einen Speicherfehler in Ihrem Code hinweist. Verwenden Sie statische Analysatoren, um festzustellen, ob Sie etwas übersehen haben. Es gibt mehrere da draußen, aber angesichts der Größe Ihres Projekts sollten Sie mindestens PVS-Studio und Coverity verwenden, abgesehen von dem, das mit den neuesten Visual Studio-Versionen geliefert wird. –