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

24

我正在进行一项将Qt5.2应用交叉编译到基于ARM的目标(TI AM335x EVM)的工作,但它无法在我的平台上显示任何内容。经过一些谷歌搜索,我发现如果使用以下命令运行:

 ./helloworld -platform eglfs

它会以全屏的形式显示(但它能正常工作)!

我开始研究所有平台选项,我找到了:

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

我在想这些选项是用来做什么的。例如,如果我想在Android设备上运行我的应用程序,我需要传递 -platform android,但并不是所有选项对我来说都很明显。

是否有任何地方列出了应该使用这些参数的情况?

例如,eglfs 是什么意思?为什么我需要使用它而不是 linuxfb
(我本来认为 Linux 帧缓冲是我想要启动应用程序的方式,因为它正在运行嵌入式 Linux)


Android、Windows、Cocoa(即OS X)、iOS和QNX都是各自平台的,将会在相应平台上自动选择。尤其是在Linux上的各种选项并不是那么明显,而且显然也文档化得不太好...也许这可以解决一些问题:http://qt-project.org/forums/viewthread/24299 - Frank Osterfeld
3个回答

39
如果linuxfb插件不起作用,那么可能是您没有正确配置系统上的帧缓冲设备。也许已经运行了一个直接的图形层,所以您可以尝试使用directfb插件。
如果您希望在使用-platform <plugin>选项运行可执行文件时避免指定平台选项,您可以在构建Qt时将默认选项传递给configure,或者通过导出QT_QPA_PLATFORM=<plugin>来覆盖内置的默认选项。
插件可以描述如下:
Linux插件 - 这些插件使用Linux特定的输入设备和各种输出设备。
- wayland(自Qt 5.11起) - 允许在Wayland显示服务器上运行Qt应用程序。 - eglfs - 在全屏模式下使用OpenGL ES。因为OpenGL没有窗口管理器的概念,所以没有其他方式。 - directfb(不是directfp) - 使用Linux帧缓冲和OpenGL ES通过directfb层(参见wikipedia)。集成到directfb窗口管理器中。 - linuxfb - 在全屏模式下使用Linux帧缓冲。因为linuxfb没有窗口管理器的概念,所以没有其他方式。 - kms - 在全屏模式下使用Linux内核模式设置API。因为DRM没有窗口管理器的概念,所以没有其他方式。 - openwfd - 在全屏模式下使用openwfd Wifi显示。因为openwfd没有窗口管理器的概念,所以没有其他方式。
平台无关的插件 - 可以在任何操作系统上运行。
- xcb - 在X11服务器上运行,并集成到X11窗口环境中。通常情况下,如果没有运行窗口管理器,它将无法正确工作。如果您想从Windows服务器提供应用程序给X11终端(通常是Unix系统),可以在Windows上实现xlib来使其工作。 - offscreen - 渲染到离屏缓冲区。适用于自定义显示。 - minimal - 一个最小化的后备存储,可选择将虚拟屏幕转储到文件中。实现了最基本的功能,只是为了演示如何开始编写平台插件。
其他特定于平台的插件
- android - 使用Android API,并集成到Android环境中。 - windows - 使用WINAPI,并集成到Windows窗口环境中。 - cocoa - 使用Cocoa API,并集成到OS X窗口环境中。 - iOS - 使用iOS工具包,并集成到iOS环境中。 - qnx - 使用QNX API,并集成到QNX photon窗口环境中。

1
我已将此设置为社区Wiki,以便每个人都可以随时更新。 - Kuba hasn't forgotten Monica

2
我刚刚在TI论坛上回复了同样的问题。如果eglfs可用而linuxfb不可用,请在qt-project.org的JIRA上报告错误,因为AM335x中的eglfs和linuxfb都使用Linux帧缓冲区。eglfs(与小部件应用程序一起使用时)使用全屏显示的脏矩形方法。如果可能,请转移到Qt5上的QML。
PS:您可以在目标上导出“QT_QPA_PLATFORM = eglfs”(或“linuxfb”),以避免每次调用应用程序时设置平台。(http://doc.qt.io/qt-5/embedded-linux.html

2
自回答被写出来以来,最值得注意的新增可能是Qt的wayland平台,似乎是从Qt 5.11开始(在官方二进制文件中)。现在在Fedora 31+上默认启用...这对某些应用程序可能有点棘手。Red Hat不得不实现一个回退列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接