J'étais en train de faire une compilation croisée d'une application Qt5.2 pour une cible basée sur ARM (TI AM335x EVM) et aucun élément n'a été affiché sur ma plateforme. Après quelques recherches sur Google, j’ai trouvé que si je le lançais avec:
./helloworld -platform eglfs
il apparaîtrait (plein écran, mais cela a fonctionné)!
J'ai commencé à regarder toutes les options de plate-forme, j'ai trouvé:
Android, eglfs, linuxfb, minimalegl, windows, xcb, cacao, ios, offscreen, qnx, directfp, kms, minimal, openwfd
Je me demande à quoi ils servent. Je suppose, par exemple, que si je veux exécuter mon application sur un périphérique Android, je dois passer -platform Android
, mais elles ne me sont pas toutes évidentes.
Existe-t-il une liste des endroits où chacun de ces paramètres devrait être utilisé?
Par exemple, que signifie eglfs
? Et pourquoi avais-je besoin de l'utiliser là où linuxfb
ne fonctionnait pas?
(J'aurais pensé que le tampon de trame Linux était le moyen par lequel je voulais lancer mon application car elle fonctionnait sous Linux intégré)
Si le plugin linuxfb
ne fonctionne pas, alors vous n'avez peut-être pas configuré correctement le périphérique framebuffer sur votre système. Peut-être qu’une couche directf est déjà en cours d’exécution, vous voudrez peut-être plutôt essayer le plugin directfb
.
Si vous souhaitez éviter de spécifier l'option de plate-forme lorsque vous exécutez l'exécutable, vous pouvez passer la valeur par défaut à configure
lors de la création de Qt.
Les plugins peuvent être décrits comme suit:
Plugins Linux - ceux-ci utilisent des périphériques d'entrée spécifiques à Linux et divers périphériques de sortie
eglfs - Utilise OpenGL ES en mode plein écran. Il n'y a pas d'autre moyen puisque OpenGL n'a pas de concept de gestionnaire de fenêtres.
directfb (not directfp) - Utilise le tampon de trame Linux avec OpenGL ES via la couche directfb . S'intègre dans le fenêtrage directfb.
linuxfb - Utilise le tampon de trame linux en mode plein écran. Il n'y a pas d'autre moyen puisque linuxfb n'a pas de concept de gestionnaire de fenêtres.
kms - Utilise l'API de définition de mode du noyau Linux en mode plein écran. Il n'y a pas d'autre moyen puisque DRM n'a pas de concept de gestionnaire de fenêtres.
openwfd - Utilise un affichage openwfd Wifi en mode plein écran. Il n'y a pas d'autre moyen puisque openwfd n'a pas de concept de gestionnaire de fenêtres.
Plugins indépendants de la plate-forme - peuvent être exécutés sur n'importe quel système d'exploitation
xcb - Fonctionne sur un serveur X11 et est intégré à l'environnement Windows X11. Généralement, il ne se comportera pas correctement sans un gestionnaire de fenêtres en cours d'exécution. Cela peut être fait pour fonctionner sur Windows, étant donné une implémentation Windows de xlib, si vous voulez, par exemple, servir des applications d’un serveur Windows à des terminaux fins X11 (généralement des boîtiers Unix).
offscreen - Restitue dans un tampon hors écran. Utile pour le rendu sur des affichages personnalisés.
minimal - Un magasin de stockage minimaliste qui vide éventuellement l'écran virtuel dans un fichier. Implémente le strict minimum de fonctionnalités pour montrer comment commencer à écrire un plugin de plateforme.
Autres plugins spécifiques à la plateforme
Android - Utilise les API Android et est intégré à l'environnement Android.
windows - Utilise le WINAPI et est intégré à l'environnement Windows de Windows.
cacao - Utilise les API Cocoa et est intégré à l'environnement de fenêtrage OS X.
iOS - Utilise les toolkits iOS et est intégré à l'environnement iOS.
qnx - Utilise les API QNX et est intégré à l'environnement de fenêtrage de photons QNX.
Je viens de répondre dans les forums TI à la même requête. Si eglfs est fonctionnel et que linuxfb ne l’est pas, veuillez enregistrer un bogue dans JIRA avec qt-project.org, car eglfs et linuxfb dans AM335x utilisent le framebuffer de Linux. eglfs (lorsqu'il est utilisé avec une application de widget) utilise une approche en rectangle sale avec un affichage plein écran. Déplacez également QML si possible lorsque vous êtes sur Qt5.
PS: vous pouvez exporter QT_QPA_PLATFORM=eglfs
(ou linuxfb
) sur la cible pour éviter de définir la plate-forme à chaque fois que vous appelez l'application. ( http://doc.qt.io/qt-5/embedded-linux.html )