i正在对基于ARM的目标(Ti AM335X EVM)进行QT5.2应用程序进行一些交叉编译,并且无法在我的平台上显示任何内容。做了一些Google之后,我发现如果我启动了它:
./helloworld -platform eglfs
它将显示(全屏,但有效)!
我开始查看所有平台选项,我发现:
android,eglfs,linuxfb,minimalegl,windows,xcb,可可,iOS,iOS,offscreen,qnx,directfp,kmms,kmms,simimal,openwfd
我想知道它们的用途。例如,我认为,如果我想在Android设备上运行我的应用程序,我必须通过-platform android
,但对我来说并不是很明显。
应使用这些参数中的每个参数时,是否有清单?
例如,eglfs
代表什么?为什么我需要在linuxfb
不起作用的情况下使用它?
(我以为Linux框架缓冲区是我要启动应用程序的方式,因为它在嵌入式Linux上运行)
如果linuxfb
插件不起作用,那么您可能没有正确配置系统上的Framebuffer设备。也许DirectF层已经在运行,因此您可能需要尝试directfb
插件。
如果您希望在运行可执行文件时必须指定平台选项,则可以在构建QT时将默认值传递给configure
。
插件可以描述如下:
-
Linux插件 - 使用Linux特定输入设备和各种输出设备
-
eglfs-在全屏模式下使用OpenGL ES。由于OpenGL没有窗口管理器的概念,因此没有其他方法。
-
directFB(不是DirectFP) - 通过DirectFB层使用带有OpenGL ES的Linux框架缓冲区(另请参见Wikipedia)。集成到DirectFB窗口中。
-
LinuxFB-在全屏模式下使用Linux框架缓冲区。没有其他方法,因为LinuxFB没有窗口管理器的概念。
-
kms-在全屏模式下使用Linux内核模式API。由于DRM没有窗口管理器的概念,没有其他方法。
-
OpenWFD-在全屏模式下使用OpenWFD WiFi显示。没有其他方法,因为OpenWFD没有窗口管理器的概念。
-
无独立的插件 - 可以在任何OS
上运行 -
XCB-在X11服务器上运行,并集成到X11窗口环境中。通常,如果没有窗口管理器也运行,它的行为将无法正确。可以在给定Xlib的Windows实现的Windows上工作,如果您想将Windows Server的应用程序提供给X11薄终端(通常是UNIX框)。
-
屏幕外 - 呈现到屏幕上的缓冲区。对于渲染自定义显示很有用。
-
最小值 - 一种简约的备用存储存储,可选将虚拟屏幕转储到文件。仅仅说明如何开始编写平台插件。
-
其他平台特定插件
-
Android-使用Android API并集成到Android环境中。
-
Windows-使用Winapi并集成到Windows窗口环境中。
-
可可 - 使用可可API并集成到OS X窗口环境中。
-
ios-使用iOS工具包并集成到iOS环境中。
-
QNX-使用QNX API并集成到QNX光子窗口环境中。
我刚刚在Ti论坛中回答了同一查询。如果eGLFS功能性,而LinuxFB则不是,请用qt-project.org在JIRA中提交一个错误,因为AM335X中的EGLFS和LinuxFB都使用Linux Framebuffer。EGLFS(与小部件应用程序一起使用时)使用带有全屏显示的Dirty Rectangle方法。如果可能的话,也可以在QT5上移至QML。
ps:您可以在目标上导出QT_QPA_PLATFORM=eglfs
(或linuxfb
),以避免每次调用应用程序时设置平台。(http://doc.qt.io/qt-5/embedded-linux.html)
可能是QT的Wayland平台,这可能是最值得注意的补充,显然是自QT 5.11(在官方二进制文件中)以来。默认情况下,Fedora 31 ...现在启用了,对于某些应用程序来说可能会有些麻烦。红帽必须实现后备名单。