Nella nostra applicazione QT5-based, molti messaggi di questo tipo vengono visualizzati nella console:QT5 "tenta di impostare uno schermo su una finestra secondaria" molti messaggi di avviso runtime
0x1beccb0 void QWindowPrivate::setTopLevelScreen(QScreen*, bool) (QScreen(0xd25b80)): Attempt to set a screen on a child window.
Esso non impedisce l'applicazione da correndo, ma vorrei correggerli, poiché tende a indicare che probabilmente c'è qualcosa di sbagliato che stiamo facendo. Il codice è abbastanza grande (non può essere incluso nel post, è lì: http://gforge.inria.fr/frs/?group_id=1465). Non posso chiedere di dare un'occhiata a questo (troppo grande), ma forse si avrà un'idea con le seguenti informazioni aggiuntive:
I messaggi appaiono solo sotto Linux, e non sotto Windows
La nostra applicazione è un modellatore 3D, che ha diversi QGLWidgets per che visualizzano il contenuto 3D. Se rimuovo QGLWidgets, i messaggi scompaiono.
Nel debugger, se metto un punto di interruzione QWindowPrivate :: setTopLevelScreen(), viene chiamato da:
kernel/qwindow.cpp: 368 368 q-> connect (schermo, SIGNAL (distrutto (QObject *)), q, SLOT (screenDestroyed (QObject *)));
Update1: ho messo un punto di interruzione QMessageLogger :: avvertimento (qDebug() è una macro che utilizza questa funzione), ora posso vedere meglio lo stack che assomiglia:
#0 0x00007fffefa50600 in QMessageLogger::warning() [email protected]() from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#1 0x00007fffefa851cb in QWindowPrivate::setTopLevelScreen (this=0xd330e0, newScreen=0x7201a0, recreate=<optimized out>)
at kernel/qwindow.cpp:371
#2 0x00007fffefa7f2f5 in QGuiApplicationPrivate::processWindowSystemEvent ([email protected]=0x760600)
at kernel/qguiapplication.cpp:1608
#3 0x00007fffefa631f8 in QWindowSystemInterface::sendWindowSystemEvents (flags=...)
at kernel/qwindowsysteminterface.cpp:625
#4 0x00007fffeb7d4100 in userEventSourceDispatch (source=<optimized out>)
at eventdispatchers/qeventdispatcher_glib.cpp:70
(More stack frames follow...)
In QGuiApplicationPrivate :: processWindowSystemEvent, sta gestendo un evento QWindowSystemInterfacePrivate :: ThemeChange:
1608 case QWindowSystemInterfacePrivate::ThemeChange:
1609 QGuiApplicationPrivate::processThemeChanged(
1610 static_cast<QWindowSystemInterfacePrivate::ThemeChangeEvent *>(e));
1611 break;
Update2: Quasi lì !! È quando chiamo setMinimumWidth()/setMinimumHeight() su un QGLWidget. Ora mi piacerebbe sapere il motivo per cui ...
Update3: Maggiori informazioni: i messaggi sono visualizzati solo quando ho due schermi collegati al mio computer.