2014-01-31 3 views
14

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

./helloworld -platform eglfs 

было бы показать (полный экран, но он работал)!

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

андроид, eglfs, linuxfb, minimalegl, окна, XCB, какао, ИОС, закадровый, QNX, directfp, км, минимальная, openwfd

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

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

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

+0

андроид, windows, какао (это OS X), ios, qnx для соответствующих платформ и будут выбраны автоматически там. Различные варианты, особенно в Linux, не так уж очевидны и, по-видимому, также плохо документированы ... Возможно, это проливает свет на это: http://qt-project.org/forums/viewthread/24299 –

ответ

19

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

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

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

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

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

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

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

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

    • openwfd - Использует openwfd Wifi-дисплей в полноэкранном режиме. Другого пути нет, так как openwfd не имеет понятия о оконном менеджере.

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

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

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

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

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

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

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

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

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

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

1

Я просто ответил на форумах 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)

Смежные вопросы