我正在为基于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上运行)
答案 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。