Nel mio Qt 5.3 applicazione, voglio integrare l'interfaccia grafica da un processo figlio nel mio processo di finestra principale:errori di disegno e incidente con QWidget :: createWindowContainer
- Il processo figlio crea un alto livello
QWidget
. - Il processo figlio comunica il widget
WId
come restituito daQWidget::winId()
al genitore (utilizzando IPC). - Il genitore utilizza
QWindow::fromWinId()
eQWidget::createWindowContainer()
per creare unQWidget
che visualizza la GUI del processo figlio. Questo widget è incorporato nel layout di un altro widget.
Osservazioni:
- La GUI bambino viene visualizzata, ma non fusi correttamente: ci sono i bordi bianchi che non vengono aggiornati correttamente quando ri-dimensionamento del genitore.
- Se la finestra padre viene ridimensionata troppo piccola, il processo figlio si arresta in modo anomalo a causa di una violazione di accesso alla memoria nel codice di Qt.
- Se non si specifica un genitore con
QWidget::createWindowContainer()
per utilizzare invece una finestra di livello superiore separata, il figlio è incorporato correttamente. - Dopo aver aperto una finestra di dialogo modale, ad esempio
QMessageBox
, il problema si risolve automaticamente e il figlio viene incorporato correttamente dopo il successivo ridimensionamento del genitore.
Soprattutto l'ultimo punto mi lascia perplesso. Ho provato a scoprire se l'esecuzione di QMessageBox
modifica alcuni flag sul widget figlio e se riesco a simulare manualmente queste modifiche per aggirare il problema, senza fortuna.
Qualcuno ha un'idea di cosa sta succedendo qui? Cosa potrebbe fare la finestra di dialogo modale al widget che risolve il problema?
Grazie per la risposta! Visto che non sono in ufficio, proverò il tuo consiglio e darò un feedback lunedì CET. Sono abbastanza felice di vedere se la tua soluzione semplice funziona! –
Yay, il 'FramelessWindowHint' corregge sia il rendering dei bordi * che * l'arresto anomalo! Sono contento che ci sia una soluzione/soluzione così semplice. Grazie, ti sei guadagnato la taglia! :) –