2017-11-20 14 views
0

Ich entwickle eine Benutzeroberfläche mit qt/QML und ich muss ein Splashscreen-Bild am Anfang der Anwendung zeigen. Ich verwende die Anwendung auf einem Gerät mit einem iMX6-Mikroprozessor. Ich habe die Bibliothek QtSplashscreen verwendet, aber es gibt mir diesen Fehler: EGLFS: openGL-Fenster können nicht mit anderen gemischt werden.Wie kann ich einen Spritescreen auf meinem Projekt mit EGFLS in Qt setzen

Ich weiß, dass es nicht 2 Fenster gleichzeitig öffnen kann, kann jemand helfen?

+0

Wo finden Sie die Bibliothek 'QtSplashScreen'? Können Sie den Begrüßungsbildschirm nicht als normale qml-Datei implementieren? – m7913d

+0

Bitte geben Sie die Version von Qt an, die Sie verwenden. – derM

+0

Ich verwende Qt 5.8 – sebba23

Antwort

0

über Ihr Problem findet diese question:

OpenGL and Qt Quick 2 applications can only have one fullscreen window existing at a time. Trying to create another OpenGL window, or trying to mix an OpenGL window with a raster one will display the above message and abort the application.

QSplashScreen ein weiteres Fenster verwenden, um die Splash-Ansicht zu zeigen. Also, das ist keine direkte Lösung. Sie können Ihr QWidget in ein QQuickItem einbetten, um es als QtQuick2-Steuerelementkomponenten zu verwenden. Eine andere und schnellere Lösung besteht darin, eine QML-Komponente zu verwenden und sie mit einer Loader zu laden. Sie können einen Blick in das Qt Examples Repository werfen, dieses file ist ein gutes Beispiel.

Hier gehen wir mit einem einfachen Beispiel;

Loader { 
    id: splashLoader 
    anchors.fill: parent 
    source: "SplashScreen.qml" 
    asynchronous: false 
    visible: true 

    onStatusChanged: { 
     if (status === Loader.Ready) { 
      appLoader.setSource("App.qml"); 
     } 
    } 
} 

Connections { 
    target: splashLoader.item 
    onReadyToGo: { 
     appLoader.visible = true 
     appLoader.item.init() 
     splashLoader.visible = false 
     splashLoader.setSource("") 
     appLoader.item.forceActiveFocus(); 
    } 
} 

Loader { 
    id: appLoader 
    anchors.fill: parent 
    visible: false 
    asynchronous: true 
    onStatusChanged: { 
     if (status === Loader.Ready) 
      splashLoader.item.appReady() 
     if (status === Loader.Error) 
      splashLoader.item.errorInLoadingApp(); 
    } 
} 
+0

Wie können Sie ein QWidget in ein QQuickItem einbetten? Hast du auch ein Beispiel dafür? – derM

+0

Soweit ich weiß, können Sie QWidget nicht in QQuick2 mischen. Sie können es anders herum tun, aber ... https://stackoverflow.com/questions/13014415/qt5-embed-qwidget-object-in-qml - das gilt natürlich nur, wenn Qt5 verwendet wird. – derM

Verwandte Themen