各种Qt平台插件有什么用?

时间:2014-01-31 19:05:03

标签: linux qt plugins cross-platform qt5

我正在为基于ARM的目标(TI AM335x EVM)进行Qt5.2应用程序的交叉编译,但它无法在我的平台上显示任何内容。在做了一些google'ing后,我发现如果我用它启动它:

 ./helloworld -platform eglfs

它会出现(全屏,但它有效)!

我开始查看所有平台选项,我发现:

  

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

我想知道它们的用途。我假设,例如,如果我想在Android设备上运行我的应用程序,我必须通过-platform android,但它们对我来说并不是很明显。

是否应该使用每个参数的列表?

例如,eglfs代表什么?为什么我需要使用linuxfb不起作用的地方?
(我以为linux帧缓冲区是我想要启动我的应用程序,因为它在嵌入式linux上运行)

3 个答案:

答案 0 :(得分:23)

如果linuxfb插件不起作用,那么您可能没有在系统上正确配置帧缓冲设备。也许directf图层已在运行,因此您可能需要尝试使用directfb插件。

如果您希望避免在运行可执行文件时指定platform选项,则可以在构建Qt时将默认值传递给configure

插件可以描述如下:

  • Linux插件 - 那些使用特定于Linux的输入设备和各种输出设备

    • eglfs - 在全屏模式下使用OpenGL ES。由于OpenGL没有窗口管理器的概念,所以别无他法。

    • directfb(not directfp) - 通过directfb层使用带有OpenGL ES的linux帧缓冲区。集成到directfb窗口中。

    • linuxfb - 在全屏模式下使用linux帧缓冲区。由于linuxfb没有窗口管理器的概念,所以别无他法。

    • kms - 在全屏模式下使用linux内核模式设置API。由于DRM没有窗口管理器的概念,因此没有其他办法。

    • openwfd - 在全屏模式下使用openwfd Wifi显示。由于openwfd没有窗口管理器的概念,所以别无他法。

  • 独立于平台的插件 - 可以在任何操作系统上运行

    • xcb - 在X11服务器上运行,并集成到X11窗口环境中。通常,如果没有窗口管理器运行,它也不会正常运行。如果您希望将应用程序从Windows服务器提供给X11瘦终端(通常是Unix机箱),可以在Windows上实现xlib的Windows实现。

    • offscreen - 渲染到屏幕外缓冲区。用于渲染自定义显示。

    • minimal - 一个简约的后备存储,可选择将虚拟屏幕转储到文件中。实现最低限度的功能只是为了演示如何开始编写平台插件。

  • 其他特定于平台的插件

    • android - 使用Android API并集成到Android环境中。

    • windows - 使用WINAPI并集成到Windows窗口环境中。

    • cocoa - 使用Cocoa API并集成到OS X窗口环境中。

    • iOS - 使用iOS工具包并集成到iOS环境中。

    • qnx - 使用QNX API并集成到QNX光子窗口环境中。

答案 1 :(得分:1)

我刚刚在TI论坛上回复了相同的查询。如果eglfs功能正常而linuxfb不起作用,请使用qt-project.org在JIRA中提交一个错误,因为AM335x中的eglfs和linuxfb都使用linux framebuffer。 eglfs(与widget应用程序一起使用时)使用脏矩形方法和全屏显示。如果可能的话,在Qt5上也可以转到QML。

PS:您可以在目标上导出QT_QPA_PLATFORM=eglfs(或linuxfb),以避免每次调用应用程序时都设置平台。 (http://doc.qt.io/qt-5/embedded-linux.html

答案 2 :(得分:0)

自从编写了接受的答案以来,最值得注意的补充可能是Qt的Wayland平台,显然是since Qt 5.11(在官方二进制文件中)。现在Enabled在Fedora 31+上默认为...,某些应用程序可以为a little troublesome。红帽必须实现a fallback list