Executando Aplicações Demo Qt
A imagem em execução no Sistema Embarcado Toradex com Framework Qt5 instalado já possui algumas aplicações exemplos, como:
- cinematicexperience
- qt5everywheredemo
- qtsmarthome
Muitas informações e configurações desta prática e mais opções podem ser visualizadas em:
1. Configure an Embedded Linux Device
2. Qt for Embedded Linux
3. Qt for Embedded Linux - LinuxFB
4. Qt for Embedded Linux - EGLFS
Configurando qtbase para suportar EGLFS e LinuxFB
Para gerar uma imagem que o Framework Qt5 contenha suporte a EGLFS e Linuxfb, no Container do Yocto Project, acessar o diretório meta-treinamento e criar os diretorios recipes-qt/qt5 e criar o arquivo qtbase_git.bbappend.
Executar no TARGETcd ~/treinamento/yp/poky/
cd meta-treinamento
mkdir -p recipes-qt/qt5
cd recipes-qt/qt5
touch qtbase_%.bbappend
Adicionar o conteúdo:
PACKAGECONFIG:append = " sql-sqlite eglfs linuxfb"
PACKAGECONFIG:remove = " examples"
Salve o arquivo!
Acesse o diretório de build e abra o arquivo conf/local.conf e adicione no final a configuração abaixo para forçar utilizar a versão v1 do libgpiod.
PREFERRED_VERSION_libgpiod = "1.6.4"
Salve o arquivo e compile novamente a imagem e posteriormente gerar novamente o SDK com bitbake <receita-da-imagem> -c populate_sdk.
Executando Aplicação Exemplo Qt5
Acessando o TARGET, testando uma das aplicações exemplo:
Executar no TARGETcd /usr/share/qt5everywheredemo-1.0/
Executar no TARGET./QtDemo --platform linuxfb
Executar no TARGET./QtDemo --platform eglfs
Resultado:
| EGL: Warning: No default display support on wayland
Could not open egl display
Aborted (core dumped)
|
Depurando Problema de Execução
Habilitando QT_LOGGING_RULES para qt.qpa.*, com isso mais detalhes do QPA utilizada para execução e sua respectiva configuração:
Executar no TARGETexport QT_LOGGING_RULES="qt.qpa.*=true"
./QtDemo --platform eglfs
Resultado:
| qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_emu", "eglfs_kms_egldevice", "eglfs_kms")
qt.qpa.egldeviceintegration: EGL device integration plugin keys (sorted): ("eglfs_emu", "eglfs_kms_egldevice", "eglfs_kms")
qt.qpa.egldeviceintegration: Trying to load device EGL integration "eglfs_emu"
qt.qpa.egldeviceintegration: Using EGL device integration "eglfs_emu"
EGL: Warning: No default display support on wayland
Could not open egl display
Aborted (core dumped)
|
Analisando o resultado acima, existe três opções de EGL device para integração: eglfs_emu, eglfs_kms_egldevice e eglfs_kms
Na linha 3 pode-se confirmar a utilização do eglfs_emu neste caso deveria ser eglfs_kms, resolvendo configurando uma variavei ambiente do Qt para isso QT_QPA_EGLFS_INTEGRATION:
Executar no TARGETexport QT_LOGGING_RULES="qt.qpa.*=true"
export QT_QPA_EGLFS_INTEGRATION=eglfs_kms
./QtDemo --platform eglfs
Resultado:
| qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_emu", "eglfs_kms_egldevice", "eglfs_kms")
qt.qpa.egldeviceintegration: EGL device integration plugin keys (sorted): ("eglfs_kms", "eglfs_emu", "eglfs_kms_egldevice")
qt.qpa.egldeviceintegration: Trying to load device EGL integration "eglfs_kms"
qt.qpa.eglfs.kms: New DRM/KMS via GBM integration created
qt.qpa.egldeviceintegration: Using EGL device integration "eglfs_kms"
qt.qpa.eglfs.kms: platformInit: Opening DRM device
qt.qpa.input: udev device discovery for type QFlags<QDeviceDiscovery::QDeviceType>(Device_DRM|Device_VideoMask)
qt.qpa.input: Found matching devices ("/dev/dri/card0", "/dev/dri/card2", "/dev/dri/card1")
qt.qpa.eglfs.kms: Found the following video devices: ("/dev/dri/card0", "/dev/dri/card2", "/dev/dri/card1")
qt.qpa.eglfs.kms: Using "/dev/dri/card0"
qt.qpa.eglfs.kms: Using backend-provided DRM device /dev/dri/card0
qt.qpa.eglfs.kms: Creating GBM device for file descriptor 6 obtained from "/dev/dri/card0"
qt.qpa.eglfs.kms: Using dedicated drm event reading thread
qt.qpa.eglfs.kms: Initalizing event reader for device 0x55a0d6a340 fd 6
qt.qpa.eglfs.kms: Querying EGLDisplay
qt.qpa.eglfs.kms: Event r[ 91.588084] QtDemo[437]: memfd_create() called without MFD_EXEC or MFD_NOEXEC_SEAL set
eader thread: entering event loop
drmModeGetResources failed (Operation not supported)
qt.qpa.input: evdevkeyboard: Using device discovery
qt.qpa.input: udev device discovery for type QFlags<QDeviceDiscovery::QDeviceType>(Device_Keyboard)
qt.qpa.input: Found matching devices ("/dev/input/event0")
qt.qpa.input: Adding keyboard at /dev/input/event0
qt.qpa.input: Try to create keyboard handler for "/dev/input/event0" ""
qt.qpa.input: Opening keyboard at /dev/input/event0
qt.qpa.input: Create keyboard handler with for device "/dev/input/event0"
qt.qpa.input: Unload current keymap and restore built-in
qt.qpa.input: numlock=0 , capslock=0, scrolllock=0
qt.qpa.input: evdevmouse: Using device discovery
qt.qpa.input: udev device discovery for type QFlags<QDeviceDiscovery::QDeviceType>(Device_Mouse|Device_Touchpad)
qt.qpa.input: Found matching devices ()
qt.qpa.input: evdevtouch: Using device discovery
qt.qpa.input: udev device discovery for type QFlags<QDeviceDiscovery::QDeviceType>(Device_Touchpad|Device_Touchscreen)
qt.qpa.input: Found matching devices ("/dev/input/event1")
qt.qpa.input: evdevtouch: Adding device at /dev/input/event1
qt.qpa.input: evdevtouch: Using device /dev/input/event1
qt.qpa.input: evdevtouch: /dev/input/event1: Protocol type B (multi), filtered=no
qt.qpa.input: evdevtouch: /dev/input/event1: min X: 0 max X: 799
qt.qpa.input: evdevtouch: /dev/input/event1: min Y: 0 max Y: 479
qt.qpa.input: evdevtouch: /dev/input/event1: min pressure: 0 max pressure: 0
qt.qpa.input: evdevtouch: /dev/input/event1: device name: Atmel maXTouch Touchscreen
Cannot create window: no screens available
Aborted (core dumped)
|
Analisando as novas informações, primeiramente pode-se confirmar a correta configuração do EGL Device observando a saída da linha 5. Na sequencia o Qt tentara configurar e utilizar a saída de video/display disponivel, e na linha 8 tem as interfaces encontradas e na linha 10 a interface selecionada/escolhida por padrão, esta correta?
Confirmando quem é cada uma das Interfaces de Video/Display:
Executar no TARGETls -l /sys/class/drm/
Saída:
| lrwxrwxrwx 1 root root 0 May 29 18:48 card0 -> ../../devices/platform/bus@53100000/80000000.imx8_gpu0_ss/drm/card0
lrwxrwxrwx 1 root root 0 Jun 30 14:38 card1 -> ../../devices/platform/display-subsystem/drm/card1
lrwxrwxrwx 1 root root 0 Jun 30 14:38 card2 -> ../../devices/platform/bus@5a180000/5a180000.lcdif/drm/card2
lrwxrwxrwx 1 root root 0 Jun 30 14:38 card2-DPI-1 -> ../../devices/platform/bus@5a180000/5a180000.lcdif/drm/card2/card2-DPI-1
lrwxrwxrwx 1 root root 0 May 29 18:48 renderD128 -> ../../devices/platform/bus@53100000/80000000.imx8_gpu0_ss/drm/renderD128
lrwxrwxrwx 1 root root 0 Jun 30 14:38 renderD129 -> ../../devices/platform/display-subsystem/drm/renderD129
-r--r--r-- 1 root root 4096 Jun 30 14:38 version
|
Filtrando no dmesg:
Executar no TARGETdmesg | grep drm
Saída:
| [ 3.922335] systemd[1]: Starting Load Kernel Module drm...
[ 4.482507] [drm] Initialized vivante 1.0.0 20170808 for 80000000.imx8_gpu0_ss on minor 0
[ 9.060960] imx-drm display-subsystem: bound imx-drm-dpu-bliteng.2 (ops 0xffffffc080c594b0)
[ 9.132236] imx-drm display-subsystem: bound imx-dpu-crtc.0 (ops 0xffffffc080c590b8)
[ 9.161531] imx-drm display-subsystem: bound imx-dpu-crtc.1 (ops 0xffffffc080c590b8)
[ 9.204117] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 1
[ 9.235165] imx-drm display-subsystem: [drm] Cannot find any crtc or sizes
[ 10.431282] [drm] Initialized mxsfb-drm 1.0.0 20160824 for 5a180000.lcdif on minor 2
[ 10.575735] mxsfb 5a180000.lcdif: [drm] fb0: mxsfb-drmdrmfb frame buffer device
|
O erro parece estar relacionado ao EGLFS utilizard o /dev/dri/card0 que é GPU, como não tem um Servidor Gráfico em execução X11 ou Wayland, deveria apontar para a saída da interface de display utilizada, neste caso LCD Interface(lcdif).
Deverá ser criado um arquivo chamado kms.conf e passar o caminho para acessar o arquivo atravéz da variável ambiente QT_QPA_EGLFS_KMS_CONFIG.
Executar no TARGETtouch /etc/kms.conf
Adicionar o conteúdo abaixo:
{
"device": "/dev/dri/card2",
"hwcursor": false,
"pbuffers": true,
"outputs": [ ]
}
Exportando a variável ambiente:
Executar no TARGETexport QT_QPA_EGLFS_KMS_CONFIG=/etc/kms.conf
Executando a aplicação:
Executar no TARGET./QtDemo --platform eglfs
Saída:
| qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_emu", "eglfs_kms_egldevice", "eglfs_kms")
qt.qpa.egldeviceintegration: EGL device integration plugin keys (sorted): ("eglfs_kms", "eglfs_emu", "eglfs_kms_egldevice")
qt.qpa.egldeviceintegration: Trying to load device EGL integration "eglfs_kms"
qt.qpa.eglfs.kms: New DRM/KMS via GBM integration created
qt.qpa.egldeviceintegration: Using EGL device integration "eglfs_kms"
qt.qpa.eglfs.kms: platformInit: Opening DRM device
qt.qpa.input: udev device discovery for type QFlags<QDeviceDiscovery::QDeviceType>(Device_DRM|Device_VideoMask)
qt.qpa.input: Found matching devices ("/dev/dri/card0", "/dev/dri/card2", "/dev/dri/card1")
qt.qpa.eglfs.kms: Found the following video devices: ("/dev/dri/card0", "/dev/dri/card2", "/dev/dri/card1")
qt.qpa.eglfs.kms: Using "/dev/dri/card0"
qt.qpa.eglfs.kms: Using backend-provided DRM device /dev/dri/card0
qt.qpa.eglfs.kms: Creating GBM device for file descriptor 6 obtained from "/dev/dri/card0"
qt.qpa.eglfs.kms: Using dedicated drm event reading thread
qt.qpa.eglfs.kms: Initalizing event reader for device 0x55a0d6a340 fd 6
qt.qpa.eglfs.kms: Querying EGLDisplay
qt.qpa.eglfs.kms: Event r[ 91.588084] QtDemo[437]: memfd_create() called without MFD_EXEC or MFD_NOEXEC_SEAL set
eader thread: entering event loop
root@colibri-imx8x-06846849:/usr/share/qt5everywheredemo-1.0# ./QtDemo --platform eglfs
qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_emu", "eglfs_kms_egldevice", "eglfs_kms")
qt.qpa.egldeviceintegration: EGL device integration plugin keys (sorted): ("eglfs_kms", "eglfs_emu", "eglfs_kms_egldevice")
qt.qpa.egldeviceintegration: Trying to load device EGL integration "eglfs_kms"
qt.qpa.eglfs.kms: Loading KMS setup from "/etc/kms.conf"
qt.qpa.eglfs.kms: Requested configuration (some settings may be ignored):
headless: false
hwcursor: false
pbuffers: true
separateScreens: false
virtualDesktopLayout: 0
outputs: QMap()
qt.qpa.eglfs.kms: New DRM/KMS via GBM integration created
qt.qpa.egldeviceintegration: Using EGL device integration "eglfs_kms"
qt.qpa.eglfs.kms: platformInit: Opening DRM device
qt.qpa.eglfs.kms: GBM: Using DRM device "/dev/dri/card2" specified in config file
qt.qpa.eglfs.kms: Using backend-provided DRM device /dev/dri/card2
qt.qpa.eglfs.kms: Creating GBM device for file descriptor 5 obtained from "/dev/dri/card2"
qt.qpa.eglfs.kms: Using dedicated drm event reading thread
qt.qpa.eglfs.kms: Initalizing event reader for device 0x5594210400 fd 5
qt.qpa.eglfs.kms: Querying EGLDisplay
qt.qpa.eglfs.kms: Event reader thread: entering event loop
qt.qpa.eglfs.kms: Atomic reported as supported
qt.qpa.eglfs.kms: Atomic disabled
qt.qpa.eglfs.kms: Found 1 planes
qt.qpa.eglfs.kms: plane 0: id = 31 countFormats = 12 possibleCrtcs = 0x1 supported formats = RG16 BG16 XR24 AR24 XB24 AB24 RX24 RA24 AR15 XR15 AB15 XB15
qt.qpa.eglfs.kms: property 0: id = 8 name = 'type'
qt.qpa.eglfs.kms: type is ENUM, value is 1, possible values are:
qt.qpa.eglfs.kms: enum 0: Overlay - 0
qt.qpa.eglfs.kms: enum 1: Primary - 1
qt.qpa.eglfs.kms: enum 2: Cursor - 2
qt.qpa.eglfs.kms: property 1: id = 17 name = 'FB_ID'
qt.qpa.eglfs.kms: type is OBJECT
qt.qpa.eglfs.kms: property 2: id = 18 name = 'IN_FENCE_FD'
qt.qpa.eglfs.kms: type is SIGNED_RANGE, value is -1, possible values are:
qt.qpa.eglfs.kms: -1
qt.qpa.eglfs.kms: 2147483647
qt.qpa.eglfs.kms: property 3: id = 20 name = 'CRTC_ID'
qt.qpa.eglfs.kms: type is OBJECT
qt.qpa.eglfs.kms: property 4: id = 13 name = 'CRTC_X'
qt.qpa.eglfs.kms: type is SIGNED_RANGE, value is 0, possible values are:
qt.qpa.eglfs.kms: -2147483648
qt.qpa.eglfs.kms: 2147483647
qt.qpa.eglfs.kms: property 5: id = 14 name = 'CRTC_Y'
qt.qpa.eglfs.kms: type is SIGNED_RANGE, value is 0, possible values are:
qt.qpa.eglfs.kms: -2147483648
qt.qpa.eglfs.kms: 2147483647
qt.qpa.eglfs.kms: property 6: id = 15 name = 'CRTC_W'
qt.qpa.eglfs.kms: type is RANGE, value is 800, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 2147483647
qt.qpa.eglfs.kms: property 7: id = 16 name = 'CRTC_H'
qt.qpa.eglfs.kms: type is RANGE, value is 480, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 2147483647
qt.qpa.eglfs.kms: property 8: id = 9 name = 'SRC_X'
qt.qpa.eglfs.kms: type is RANGE, value is 0, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 4294967295
qt.qpa.eglfs.kms: property 9: id = 10 name = 'SRC_Y'
qt.qpa.eglfs.kms: type is RANGE, value is 0, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 4294967295
qt.qpa.eglfs.kms: property 10: id = 11 name = 'SRC_W'
qt.qpa.eglfs.kms: type is RANGE, value is 52428800, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 4294967295
qt.qpa.eglfs.kms: property 11: id = 12 name = 'SRC_H'
qt.qpa.eglfs.kms: type is RANGE, value is 31457280, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 4294967295
qt.qpa.eglfs.kms: property 12: id = 30 name = 'IN_FORMATS'
qt.qpa.eglfs.kms: type is BLOB
qt.qpa.eglfs.kms: "UNKNOWN1" mode count: 1 crtc index: 0 crtc id: 33
qt.qpa.eglfs.kms: mode 0 800 x 480 @ 60 hz
qt.qpa.eglfs.kms: Selected mode 0 : 800 x 480 @ 60 hz for output "UNKNOWN1"
qt.qpa.eglfs.kms: Physical size is QSizeF(154, 86) mm for output "UNKNOWN1"
qt.qpa.eglfs.kms: Format is 34325258 requested_by_user = false for output "UNKNOWN1"
qt.qpa.eglfs.kms: Output "UNKNOWN1" framebuffer size is QSize(800, 480)
qt.qpa.eglfs.kms: property 0: id = 1 name = 'EDID'
qt.qpa.eglfs.kms: type is BLOB
qt.qpa.eglfs.kms: property 1: id = 2 name = 'DPMS'
qt.qpa.eglfs.kms: type is ENUM, value is 0, possible values are:
qt.qpa.eglfs.kms: enum 0: On - 0
qt.qpa.eglfs.kms: enum 1: Standby - 1
qt.qpa.eglfs.kms: enum 2: Suspend - 2
qt.qpa.eglfs.kms: enum 3: Off - 3
qt.qpa.eglfs.kms: property 2: id = 5 name = 'link-status'
qt.qpa.eglfs.kms: type is ENUM, value is 0, possible values are:
qt.qpa.eglfs.kms: enum 0: Good - 0
qt.qpa.eglfs.kms: enum 1: Bad - 1
qt.qpa.eglfs.kms: property 3: id = 6 name = 'non-desktop'
qt.qpa.eglfs.kms: type is RANGE, value is 0, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 1
qt.qpa.eglfs.kms: property 4: id = 4 name = 'TILE'
qt.qpa.eglfs.kms: type is BLOB
qt.qpa.eglfs.kms: property 5: id = 20 name = 'CRTC_ID'
qt.qpa.eglfs.kms: type is OBJECT
qt.qpa.eglfs.kms: property 0: id = 22 name = 'ACTIVE'
qt.qpa.eglfs.kms: type is RANGE, value is 1, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 1
qt.qpa.eglfs.kms: property 1: id = 23 name = 'MODE_ID'
qt.qpa.eglfs.kms: type is BLOB
qt.qpa.eglfs.kms: property 2: id = 19 name = 'OUT_FENCE_PTR'
qt.qpa.eglfs.kms: type is RANGE, value is 0, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 18446744073709551615
qt.qpa.eglfs.kms: property 3: id = 24 name = 'VRR_ENABLED'
qt.qpa.eglfs.kms: type is RANGE, value is 0, possible values are:
qt.qpa.eglfs.kms: 0
qt.qpa.eglfs.kms: 1
qt.qpa.eglfs.kms: Output UNKNOWN1 can use 1 planes: 31
qt.qpa.eglfs.kms: Chose plane 31 for output UNKNOWN1 (crtc id 33) (may not be applicable)
qt.qpa.eglfs.kms: Using plain OpenGL mouse cursor
qt.qpa.eglfs.kms: No EDID data for output "UNKNOWN1"
qt.qpa.eglfs.kms: Sorted screen list: QVector(OrderedScreen(QPlatformScreen=0x55942467d0 ("UNKNOWN1") : 2147483647 / QPoint(0,0) / primary: false))
qt.qpa.eglfs.kms: Adding QPlatformScreen 0x55942467d0 ( "UNKNOWN1" ) to QPA with geometry QRect(0,0 800x480) and isPrimary= false
qt.qpa.input: evdevkeyboard: Using device discovery
qt.qpa.input: udev device discovery for type QFlags<QDeviceDiscovery::QDeviceType>(Device_Keyboard)
qt.qpa.input: Found matching devices ("/dev/input/event0")
qt.qpa.input: Adding keyboard at /dev/input/event0
qt.qpa.input: Try to create keyboard handler for "/dev/input/event0" ""
qt.qpa.input: Opening keyboard at /dev/input/event0
qt.qpa.input: Create keyboard handler with for device "/dev/input/event0"
qt.qpa.input: Unload current keymap and restore built-in
qt.qpa.input: numlock=0 , capslock=0, scrolllock=0
qt.qpa.input: evdevmouse: Using device discovery
qt.qpa.input: udev device discovery for type QFlags<QDeviceDiscovery::QDeviceType>(Device_Mouse|Device_Touchpad)
qt.qpa.input: Found matching devices ()
qt.qpa.input: evdevtouch: Using device discovery
qt.qpa.input: udev device discovery for type QFlags<QDeviceDiscovery::QDeviceType>(Device_Touchpad|Device_Touchscreen)
qt.qpa.input: Found matching devices ("/dev/input/event1")
qt.qpa.input: evdevtouch: Adding device at /dev/input/event1
qt.qpa.input: evdevtouch: Using device /dev/input/event1
qt.qpa.input: evdevtouch: /dev/input/event1: Protocol type B (multi), filtered=no
qt.qpa.input: evdevtouch: /dev/input/event1: min X: 0 max X: 799
qt.qpa.input: evdevtouch: /dev/input/event1: min Y: 0 max Y: 479
qt.qpa.input: evdevtouch: /dev/input/event1: min pressure: 0 max pressure: 0
qt.qpa.input: evdevtouch: /dev/input/event1: device name: Atmel maXTouch Touchscreen
qt.qpa.eglfs.kms: Creating gbm_surface for screen UNKNOWN1
qt.qpa.eglfs.kms: Got native format 34325258 from eglGetConfigAttrib() with return code true
qt.qpa.eglfs.kms: Adding FB, size 800x480, DRM format 0x34325258
qt.qpa.eglfs.kms: Setting mode for screen UNKNOWN1
qt.qpa.input: evdevtouch: Updating QInputDeviceManager device count: 1 touch devices, 0 pending handler(s)
qt.qpa.eglfs.kms: Adding FB, size 800x480, DRM format 0x34325258
qt.qpa.eglfs.kms: Adding FB, size 800x480, DRM format 0x34325258
qt.qpa.input.events: reporting TouchPoint(0 @QRectF(289,393 8x8) normalized QPointF(0.366708,0.82881) press 1 vel QVector2D(0, 0) state 1
qt.qpa.input.events: reporting TouchPoint(0 @QRectF(290,393 8x8) normalized QPointF(0.36796,0.82881) press 1 vel QVector2D(0, 0) state 2
qt.qpa.input.events: reporting TouchPoint(0 @QRectF(290,392 8x8) normalized QPointF(0.36796,0.826722) press 1 vel QVector2D(0, 0) state 2
qt.qpa.input.events: reporting TouchPoint(0 @QRectF(291,392 8x8) normalized QPointF(0.369212,0.826722) press 1 vel QVector2D(0, 0) state 2
qt.qpa.input.events: reporting TouchPoint(0 @QRectF(292,392 8x8) normalized QPointF(0.370463,0.826722) press 1 vel QVector2D(0, 0) state 2
qt.qpa.input.events: reporting TouchPoint(0 @QRectF(292,392 8x8) normalized QPointF(0.370463,0.826722) press 0 vel QVector2D(0, 0) state 8
qml: CREATING DEMO: demos/video/main.qml
qml: CREATED: demos/video/main.qml
QQmlComponent: Component is not ready
qrc:/qml/QtDemo/Slide.qml:187: TypeError: Cannot read property 'status' of null
qt.qpa.input.events: reporting TouchPoint(1 @QRectF(279,292 8x8) normalized QPointF(0.354193,0.617954) press 1 vel QVector2D(0, 0) state 1
qt.qpa.input.events: reporting TouchPoint(1 @QRectF(280,292 8x8) normalized QPointF(0.355444,0.617954) press 1 vel QVector2D(0, 0) state 2
qt.qpa.input.events: reporting TouchPoint(1 @QRectF(280,292 8x8) normalized QPointF(0.355444,0.617954) press 0 vel QVector2D(0, 0) state 8
qml: CREATING DEMO: demos/video/main.qml
qml: CREATED: demos/video/main.qml
QQmlComponent: Component is not ready
|
Sucesso!
Se preferir pode configurar através de variável ambiente o QPA a ser utilizado, exemplo:
Executar no TARGETexport QT_QPA_PLATFORM=eglfs
Variaveis Ambiente Qt
Algumas variaveis ambientes do Framework Qt muito uteis e pouco divulgadas:
Habilitado QPA GL no Logging
Executar no TARGETexport QT_LOGGING_RULES=qt.qpa.gl=true
Habilitando Scene Graph Info
Executar no TARGETexport QSG_INFO=1
Debug Plugins
Permite analisar e visualizar todos os plugins sendo carregados e utilizados, e ausentes tambem:
Executar no TARGETexport QT_DEBUG_PLUGINS=1
Scene Graph Render Dump
Ajuda a analise crash com Renderização e problemas com Scene Graph:
Executar no TARGETexport QSG_RENDERER_DEBUG=dump
Habilitar EGLFS sem GPU
É possivel utilizar EGLFS em hardwares sem GPU, com versões > 5.7:
Executar no TARGETexport QMLSCENE_DEVICE=softwarecontext