Estaba haciendo una compilación cruzada de una aplicación Qt5.2 para un objetivo basado en ARM (TI AM335x EVM) y no mostraba nada en mi plataforma. Después de buscar en Google, descubrí que si lo lanzaba con:
./helloworld -platform eglfs¡aparecería (pantalla completa, pero funcionó)!
Empecé a mirar todas las opciones de la plataforma, encontré:
androide, eglfs, linuxfb, minimalegl, ventanas, xcb, cacao, ios, fuera de pantalla, qnx, directfp, kms, mínimo, openwfd
Me pregunto para qué sirven. Supongo, por ejemplo, que si quisiera ejecutar mi aplicación en un dispositivo Android tendría que pasar -platform android , pero no todos son obvios para mí.
¿Hay una lista en algún lugar de cuándo se debe usar cada uno de estos parámetros?
Por ejemplo, ¿qué significa eglfs ? ¿Y por qué necesitaba usar eso donde linuxfb no funcionó?
(Hubiera pensado que el búfer de cuadros de Linux era como quería iniciar mi aplicación ya que se ejecutaba en Linux incorporado)
Si el complemento linuxfb no funciona, es posible que no haya configurado correctamente el dispositivo framebuffer en su sistema. Tal vez ya se esté ejecutando una capa de directf, por lo que es posible que desee probar el complemento de directfb en su lugar.
Si desea evitar tener que especificar la opción de plataforma cuando ejecuta el ejecutable, puede pasar la opción predeterminada para configure cuando compila Qt.
Los complementos se pueden describir de la siguiente manera:
Complementos de Linux: utilizan dispositivos de entrada específicos de Linux y varios dispositivos de salida
eglfs: utiliza OpenGL ES en modo de pantalla completa. No hay otra forma ya que OpenGL no tiene el concepto de administrador de ventanas.
directfb (no directfp): utiliza el búfer de cuadros de Linux con OpenGL ES a través de la capa de directfb (ver también wikipedia ). Se integra en la ventana de directfb.
linuxfb: utiliza el búfer de fotogramas de Linux en modo de pantalla completa. No hay otra forma ya que Linuxfb no tiene el concepto de un administrador de ventanas.
kms: utiliza la API de configuración de modo del kernel de Linux en modo de pantalla completa. No hay otra forma ya que DRM no tiene el concepto de administrador de ventanas.
openwfd: utiliza una pantalla wifi openwfd en modo de pantalla completa. No hay otra forma ya que openwfd no tiene concepto de administrador de ventanas.
Complementos independientes de la plataforma: se pueden ejecutar en cualquier sistema operativo
xcb: se ejecuta en un servidor X11 y está integrado en el entorno de ventanas X11. Por lo general, no se comportará correctamente si no se ejecuta también un administrador de ventanas. Se puede hacer que funcione en Windows, dada una implementación de Windows de xlib, si quiere, digamos, servir aplicaciones desde un servidor Windows a terminales delgados X11 (típicamente cajas Unix).
offscreen: renderiza a un búfer fuera de pantalla. Útil para renderizar en pantallas personalizadas.
minimal: una tienda de respaldo minimalista que, opcionalmente, volca la pantalla virtual en un archivo. Implementa el mínimo de funcionalidad solo para demostrar cómo comenzar a escribir un complemento de plataforma.
Otros complementos específicos de la plataforma
android: utiliza las API de Android y está integrado en el entorno de Android.
windows: utiliza WINAPI y está integrado en el entorno de ventanas de Windows.
cacao: utiliza las API de Cocoa y está integrado en el entorno de ventanas de OS X.
iOS: utiliza los kits de herramientas de iOS y está integrado en el entorno de iOS.
qnx: utiliza las API de QNX y está integrado en el entorno de ventanas de fotones de QNX.
Probablemente la adición más notable desde que se escribió la respuesta aceptada es la plataforma wayland de Qt, aparentemente desde Qt 5.11 (en binarios oficiales). Habilitado ahora de forma predeterminada en Fedora 31+... lo que puede ser un poco problemático para algunas aplicaciones. Red Hat tuvo que implementar una lista de reserva .
Acabo de responder en los foros de TI a la misma consulta. Si eglfs es funcional y linuxfb no, informe un error en JIRA con qt-project.org, ya que tanto eglfs como linuxfb en AM335x usan el búfer de marco de linux. eglfs (cuando se usa con una aplicación de widget) usa un enfoque de rectángulo sucio con una visualización de pantalla completa. También muévase a QML si es posible cuando esté en Qt5.
PD: puede exportar QT_QPA_PLATFORM=eglfs (o linuxfb ) en el destino para evitar configurar la plataforma cada vez que invoca la aplicación. ( http://doc.qt.io/qt-5/embedded-linux.html )