Qt5 "Versuch, einen Bildschirm auf einem untergeordneten Fenster zu setzen" viele Laufzeitwarnmeldungen

8

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:

  1. Die Meldungen erscheinen nur unter Linux und nicht unter Windows

  2. 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.

  3. 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 ...

wissen

Update3: Weitere Informationen: Die Nachrichten werden nur angezeigt, wenn zwei Bildschirme mit meinem Computer verbunden sind.

    
BrunoLevy 05.11.2015, 12:49
quelle

1 Antwort

7

Schließlich habe ich verstanden, was passiert:

  • Die Warnmeldungen treten auf, wenn setMinimumWidth () / setMinimumHeight () in einem QGLWidget unter Linux mit einer zweifachen Bildschirmdarstellung aufgerufen wird.

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).

    
BrunoLevy 03.12.2015, 12:34
quelle

Tags und Links