Nhóm của chúng tôi đang phát triển một ứng dụng phức tạp sử dụng Qt 4.7.4. Một trong những chức năng chính mà chúng tôi cung cấp yêu cầu nội dung HTML + JS được hiển thị bởi QWebBrowser.Cửa sổ tiêu chuẩn mở/lưu hộp thoại bị hỏng bởi WebKit
Vấn đề là tải của một số trang dẫn đến sự phá vỡ mở/lưu các hộp thoại:
Hộp thoại vẫn "tác phẩm" về tương tác: combobox lọc tập tin có thể được mở ra, tập tin tên có thể được nhập, nhưng tất cả điều này được vẽ sai. Danh sách tệp và cây thư mục không được vẽ chút nào.
Tôi không tìm thấy báo cáo lỗi nào về vấn đề này trên trình theo dõi lỗi Qt và google. Chúng tôi quyết định rằng vấn đề là địa phương cho dự án của chúng tôi. Chúng tôi giả sử rằng một số cấu trúc bên trong comctl32.dll bị hủy hoại bởi hoạt động ghi của ai đó đến địa chỉ không hợp lệ, nhưng chúng tôi không biết làm thế nào để nắm bắt được nguyên nhân thực sự. Cũng cần lưu ý rằng vấn đề này KHÔNG xuất hiện với Qt 5.4 và trên bất kỳ phiên bản cửa sổ nào ít hơn 8.0. Thật không may, chúng ta nên xây dựng bản phát hành tiếp theo vẫn còn trên Qt 4.8 (dự án là rất lớn, quá trình nâng cấp mất khoảng thời gian đáng kể).
Làm cách nào để khắc phục sự cố như vậy? Những gì hoạt động bộ nhớ và/hoặc các cuộc gọi WinAPI nên được nối? Mọi ý tưởng đều được đánh giá cao.
Chuỗi công cụ là MSVC 9.0 (VS 2008)
Nếu bạn muốn Qt 4.7 hoạt động trên Windows 8 trở lên, bạn sẽ tự mình duy trì nó (hoặc mua hợp đồng tùy chỉnh cho nó). Bạn có thể tải và tải lại comctl32.dll nếu có thể. Nhưng quan trọng nhất, điều này điểm hoặc là một lỗi bộ nhớ Qt, hoặc (nhiều khả năng) đến một lỗi bộ nhớ trong mã của bạn. Sử dụng các máy phân tích tĩnh để xem bạn có bỏ sót bất cứ điều gì rõ ràng không. Có rất nhiều ở đó, nhưng cho kích thước của dự án của bạn, bạn nên sử dụng ít nhất PVS-Studio và Coverity, ngoài một trong đó đi kèm với các phiên bản Visual Studio gần đây. –