In unserer Qt5-basierten Anwendung werden viele Meldungen wie diese in der Konsole angezeigt:
%Vor%Es verhindert nicht, dass die Anwendung ausgeführt wird, aber ich möchte sie beheben, da dies darauf hindeutet, dass es wahrscheinlich etwas Falsches gibt, was wir tun. Der Code ist ziemlich groß (kann nicht in der Post enthalten sein, es ist dort: Ссылка ). Ich kann Sie nicht bitten, einen Blick darauf zu werfen (zu groß), aber vielleicht haben Sie eine Idee mit folgenden zusätzlichen Informationen:
Die Meldungen erscheinen nur unter Linux und nicht unter Windows
Unsere Anwendung ist ein 3D-Modellierer, für den es mehrere QGLWidgets gibt Anzeige von 3D-Inhalten. Wenn ich die QGLWidgets entferne, dann die Nachrichten verschwinden.
Im Debugger, wenn ich einen Haltepunkt anlege QWindowPrivate :: setTopLevelScreen (), wird aufgerufen von:
kernel / qwindow.cpp: 368 368 q- & gt; connect (Bildschirm, SIGNAL (zerstört (QObject *)), q, SLOT (screenDestroyed (QObject *)));
Update1: Ich habe einen Haltepunkt auf QMessageLogger :: warning gesetzt (qDebug () ist ein Makro, das diese Funktion verwendet), jetzt kann ich besser den Stapel sehen, der wie folgt aussieht:
%Vor%In QGuiApplicationPrivate :: processWindowSystemEvent wird ein QWindowSystemInterfacePrivate :: ThemeChange-Ereignis behandelt:
%Vor%Update2: Fast da !! Dies ist der Fall, wenn ich setMinimumWidth () / setMinimumHeight () für ein QGLWidget aufruft. Jetzt würde ich gerne warum ...
wissenUpdate3: Weitere Informationen: Die Nachrichten werden nur angezeigt, wenn zwei Bildschirme mit meinem Computer verbunden sind.
Schließlich habe ich verstanden, was passiert:
Dies ist wahrscheinlich ein Fehler in Qt. Es wird wahrscheinlich nicht repariert werden, da es in der Dokumentation empfohlen wird, stattdessen das neue QOpenGLWidget zu verwenden, das in Qt 5.4 erschien (Hinweis: "OpenGL" statt "GL"), was ich getan habe und die Warnmeldungen verschwanden.
Bearbeiten: Ich habe eine Nachricht von jemandem gesehen, der Probleme mit falschem Text hatte, mit dem neuen QOpenGLWidget, das ich hier beantworte: Wenn man das neue QOpenGLWidget benutzt, muss man darauf achten, dass es nicht mehr läuft hat einen unabhängigen OpenGL-Kontext, teilt den OpenGL-Kontext mit Qt (daher müssen OpenGL-Zustände, die in der Rendering-Funktion modifiziert wurden, nach dem Beenden der Rendering-Funktion wiederhergestellt werden, z. B. Füllmodus).
Tags und Links qt5