W mojej aplikacji Qt 5.3, chcę zintegrować GUI z procesu dziecka w moim głównym oknem procesu:błędy rysowania i krach z QWidget :: createWindowContainer
- Proces dziecko tworzy najwyższego poziomu
QWidget
. - Proces potomny komunikuje widget
WId
z powrotem zQWidget::winId()
do rodzica (przy użyciu IPC). - Jednostka nadrzędna używa
QWindow::fromWinId()
iQWidget::createWindowContainer()
do utworzeniaQWidget
wyświetlającej GUI procesu potomnego. Ten widget jest osadzony w innym układzie widżetu.
Uwagi:
- GUI dziecko jest wyświetlane ale nie wyświetlane poprawnie: istnieją białe granice, które nie uzyskać zaktualizowane poprawnie podczas ponownego zaklejania rodzica.
- Jeśli rozmiar okna nadrzędnego jest zbyt mały, proces potomny ulega awarii z powodu naruszenia dostępu do pamięci w kodzie Qt.
- Jeśli nie określam elementu nadrzędnego z
QWidget::createWindowContainer()
, aby zamiast niego używać osobnego okna najwyższego poziomu, element potomny jest osadzony poprawnie. - Po tym, jak dziecko otworzy modalne okno dialogowe, takie jak
QMessageBox
, problem rozwiązuje się, a element potomny jest poprawnie osadzony po następnej zmianie rozmiaru elementu nadrzędnego.
Szczególnie ostatni punkt mnie zastanawia. Próbowałem sprawdzić, czy zmiana QMessageBox
zmienia niektóre flagi w widgecie podrzędnym i czy mogę zasymulować te zmiany ręcznie, aby obejść problem, bez powodzenia.
Czy ktoś ma pomysł, co się tutaj dzieje? Co może zrobić modalne okno dialogowe z widgetem, który rozwiązuje problem?
Dziękuję za odpowiedź! Ponieważ nie jestem w biurze w tej chwili, spróbuję twojej porady i udzielę informacji zwrotnej w poniedziałek CET. Jestem bardzo podekscytowany, aby sprawdzić, czy Twoje proste rozwiązanie działa! –
Yay, 'FramelessWindowHint' naprawia renderowanie ramek * i * awarię! Cieszę się, że istnieje takie proste rozwiązanie/obejście. Dziękuję, zasłużyłeś na nagrodę! :) –