【问题标题】:What is the use of various Qt platform plugins?各种Qt平台插件有什么用?
【发布时间】:2014-02-24 14:52:55
【问题描述】:

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

 ./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 上,确实不是那么明显,而且显然也没有很好的文档记录......也许这可以说明这一点:qt-project.org/forums/viewthread/24299

标签: linux qt plugins cross-platform qt5


【解决方案1】:

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

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

插件描述如下:

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

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

  • directfb (not directfp) - 通过directfb 层使用带有OpenGL ES 的linux 帧缓冲区(另见wikipedia)。集成到 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 光子窗口环境中。

【讨论】:

  • TODO:必须更新。嗯,自从这篇文章发布以来的 5 年里已经取得了一些进展:)
【解决方案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)

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 2011-12-23
      • 2015-08-25
      • 2020-10-05
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多