Linux 各种Qt平台插件的用途是什么?

Linux 各种Qt平台插件的用途是什么?,linux,qt,plugins,cross-platform,qt5,Linux,Qt,Plugins,Cross Platform,Qt5,我正在为基于ARM的目标(TI AM335x EVM)交叉编译Qt5.2应用程序,但它在我的平台上没有显示任何内容。在做了一些谷歌搜索之后,我发现如果我用以下工具启动它: ./helloworld -platform eglfs 它将显示(全屏,但它工作) 我开始查看所有平台选项,发现: android、eglfs、linuxfb、minimalegl、windows、xcb、cocoa、ios、屏幕外、qnx、directfp、kms、minimal、openwfd 我想知道它们是干什么用

我正在为基于ARM的目标(TI AM335x EVM)交叉编译Qt5.2应用程序,但它在我的平台上没有显示任何内容。在做了一些谷歌搜索之后,我发现如果我用以下工具启动它:

 ./helloworld -platform eglfs
它将显示(全屏,但它工作)

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

android、eglfs、linuxfb、minimalegl、windows、xcb、cocoa、ios、屏幕外、qnx、directfp、kms、minimal、openwfd

我想知道它们是干什么用的。例如,我假设,如果我想在安卓设备上运行我的应用程序,我必须通过
-platformandroid
,但它们对我来说并不都是显而易见的

是否在任何地方列出了应使用这些参数的时间


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

如果
linuxfb
插件不起作用,那么可能是您没有在系统上正确配置帧缓冲区设备。可能一个directf层已经在运行,所以您可能想试试
directfb
插件

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

插件可以描述如下:

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

  • eglfs-在全屏模式下使用OpenGL ES。因为OpenGL没有窗口管理器的概念,所以没有其他方法

  • directfb(不是directfp)-通过层将linux帧缓冲区与OpenGL ES一起使用(另请参见)。集成到directfb窗口中

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

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

  • openwfd-在全屏模式下使用Wifi显示。因为openwfd没有窗口管理器的概念,所以没有其他方法

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

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

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

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

  • 其他特定于平台的插件

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

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

  • cocoa-使用cocoa API并集成到OSX窗口环境中

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

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


我刚刚在TI论坛上回答了同样的问题。如果eglfs正常工作而linuxfb不正常,请使用qt-project.org在JIRA中提交一个bug,因为AM335x中的eglfs和linuxfb都使用linux帧缓冲区。eglfs(当与小部件应用程序一起使用时)使用脏矩形方法,全屏显示。如果可能,在Qt5上也移动到QML


PS:您可以在目标上导出
QT\u QPA\u PLATFORM=eglfs
(或
linuxfb
),以避免每次调用应用程序时都设置平台。()

自公认的答案编写以来,可能最值得注意的补充是Qt的wayland平台(显然是官方二进制文件)。现在在Fedora 31+上默认。。。这可能适用于某些应用程序。Red Hat必须实施。

android、windows、cocoa(即OS X)、ios、qnx都是针对各自的平台,将在那里自动选择。各种选项,尤其是Linux上的选项,实际上并不那么明显,而且显然也没有很好的文档记录。。。也许这能说明一些问题:TODO:这需要更新。在这篇文章发表后的5年里,有了一些进展:)