Какая польза от различных плагинов платформы Qt?

Я делал кросс-компиляцию приложения Qt5.2 для цели на основе ARM (TI AM335x EVM), и она не отображала ничего на моей платформе. После выполнения некоторых googleing я обнаружил, что если я запустил его с помощью:

 ./helloworld -platform eglfs

он появится (полный экран, но он сработал)!

Я начал изучать все варианты платформы, я обнаружил:

android, eglfs, linuxfb, minimalegl, windows, xcb, cocoa, ios, offscreen, qnx, directfp, kms, minimum, openwfd

Мне интересно, для чего они нужны. Я предполагаю, например, что если бы я хотел запустить свое приложение на Android-устройстве, Id должен передать -platform android, но они не все очевидны для меня.

Есть ли список где-либо, где каждый из этих параметров должен использоваться?

Например, что означает eglfs? И почему мне нужно использовать это, где linuxfb не работает?
(Я бы подумал, что буфер буфера linux был тем, как я хотел запустить мое приложение, поскольку он работал на встроенном Linux)

Ответы

Ответ 1

Если плагин linuxfb не работает, возможно, вы неправильно настроили устройство фреймбуфера в своей системе. Возможно, слой directf уже запущен, поэтому вы можете попробовать использовать плагин directfb.

Если вы хотите не указывать опцию платформы при запуске исполняемого файла, вы можете передать значение по умолчанию configure при создании Qt.

Плагины можно описать следующим образом:

  • Плагины Linux - для них используются устройства ввода-вывода Linux и различные устройства вывода

    • eglfs - использует OpenGL ES в полноэкранном режиме. Нет другого пути, поскольку OpenGL не имеет понятия диспетчера окон.

    • directfb (not directfp) - использует буфер фрейма linux с OpenGL ES через слой directfb. Интегрируется в окно directfb.

    • linuxfb - использует буфер фрейма linux в полноэкранном режиме. Нет другого способа, поскольку linuxfb не имеет понятия диспетчера окон.

    • kms - Использует API-интерфейс для linux kernel в полноэкранном режиме. Нет другого пути, поскольку DRM не имеет понятия диспетчера окон.

    • openwfd - использует экран openwfd Wi-Fi в полноэкранном режиме. Нет другого пути, поскольку openwfd не имеет понятия диспетчера окон.

  • Плагины, независимые от платформы, могут быть созданы для работы на любой ОС

    • xcb - запускается на сервере X11 и интегрируется в среду окон X11. Как правило, он не будет корректно вести себя без оконного менеджера. Можно сделать работу с Windows, учитывая реализацию xlib в Windows, если вы хотите, например, обслуживать приложения с сервера Windows до тонких терминалов X11 (обычно это блоки Unix).

    • offscreen - отображает буфер вне экрана. Полезно для отображения пользовательских дисплеев.

    • minimum - минималистичное хранилище резервных копий, которое необязательно выгружает виртуальный экран в файл. Реализует минимальную функциональность, чтобы продемонстрировать, как начать писать плагин платформы.

  • Другие плагины для платформы

    • android - Использует API Android и интегрируется в среду Android.

    • windows - Использует WINAPI и интегрируется в среду окон Windows.

    • cocoa - Использует API-интерфейсы Cocoa и интегрируется в среду окон OS X.

    • iOS - использует набор инструментов iOS и интегрируется в среду iOS.

    • qnx - Использует API-интерфейсы QNX и интегрируется в среду оконного преобразования фотонов QNX.

Ответ 2

Я только что ответил на форумах TI на тот же запрос. Если eglfs является функциональным, а linuxfb - нет, сообщите об ошибке в JIRA с помощью qt-project.org, так как eglfs и linuxfb в AM335x используют фреймбуфер linux. eglfs (при использовании с приложением виджета) использует подход с грязным прямоугольником с полноэкранным дисплеем. Также перейдите в QML, если это возможно, когда на Qt5.

PS: вы можете экспортировать QT_QPA_PLATFORM=eglfs (или linuxfb) в цель, чтобы избежать установки платформы каждый раз при вызове приложения. (http://doc.qt.io/qt-5/embedded-linux.html)