【问题标题】:why qt can run without x server and gtk cant为什么qt可以在没有x服务器的情况下运行而gtk不能
【发布时间】:2014-03-26 06:06:14
【问题描述】:

我正在运行 arago linux 的 AM335x 入门套件上开发基于 gstreamer 的应用程序。 “gst-launch”(带有测试管道)提供正确的命令行输出(串行),但在屏幕上不显示任何内容。顺便说一句,屏幕默认显示一个 qt 演示应用程序。终止此演示应用程序会使 gst-launch 失败。

我编译了一个“hello world”gtk 应用程序,它给出了“Gtk-WARNING **: cannot open display:”错误。顺便说一句,这里没有 X。

但是当我运行一个 Qt “hello world” 应用程序时,演示应用程序顶部会显示一个弹出窗口。

谁能解释一下原因。欢迎提出任何解决此问题的建议。

更新1: 如果我错了,请纠正我。我在想也许使用 qt-gstreamer API 可能是最简单的方法。

更新2: 我可以使用“fbdevsink”gstreamer 插件来完成这项工作。 感谢大家的指点。

【问题讨论】:

    标签: qt gtk x11 gstreamer


    【解决方案1】:

    GTK+ 需要一个有效的窗口系统——即 X11、Windows、MacOS X 或 Wayland——才能显示内容和处理事件。

    旧版本的 GTK+ 允许使用 Linux 帧缓冲设备或 DirectFB 作为窗口系统,但两个后端都已被弃用,并且要么在较新版本的 GTK+ 库中被删除,要么未维护且可能已损坏。

    【讨论】:

      【解决方案2】:

      至少有以下方法可以实现非 X 提供的 gtk capplication:

      • GTK 帧缓冲区 (gtkfb)

      您可以找到有关它的更多信息:http://www.gtk.org/api/2.6/gtk/gtk-framebuffer.html

      • 根本不使用图形功能

      这有点激烈,所以你需要坚持 glib 之类的东西。

      【讨论】:

        【解决方案3】:

        我没有使用 GTK 的经验,但我的理解是,GTK 本身就是一个图形工具包。这正是需要图形后端才能工作的部分。还有其他东西不需要,放在GLib中。

        Qt 是一个更通用的工具包,它内置了很多特性,如果你有一个 GTK GUI,你可以使用其他一些库。使用 Qt,您可以构建不需要图形后端的应用程序,但您必须从 QCoreApplication 类创建应用程序对象实例。如果您有一个使用 QApplication 的 Qt 应用程序,并且您尝试在没有图形后端的情况下运行它,也会出现错误。

        原因是实用性和保持简单,也许还有次优设计,这使得从图形后端分离一些东西变得困难。很多事情真的取决于拥有图形后端,并且在没有图形后端的情况下添加特殊情况可能会被视为额外的复杂性(==工作和错误)而没有什么好处。


        关于您问题的第二部分,我不知道 GTK 的解决方法,除了,如果您实际上并不打算画任何东西,请不要使用它。但我认为一般来说,你需要提供一个“虚拟”图形后端,它可以在没有实际屏幕的情况下满足要求。

        【讨论】:

          【解决方案4】:

          这听起来很奇怪。

          GTK+ 依赖 GDK 来满足其绘图和输入需求,而 GDK 针对不同的平台和环境使用不同的后端

          X11 后端是一个,但还有其他的。

          您只需确保使用适合您环境的后端构建 GDK。

          【讨论】:

            猜你喜欢
            • 2017-08-18
            • 2012-04-15
            • 2012-03-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-18
            相关资源
            最近更新 更多