- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现关于这个主题的文档为零(我是否在错误的地方搜索?这对我来说似乎很奇怪)。
我只需要能够为我的 Vala 应用程序使用 Qt GUI。一个例子将不胜感激。
最佳答案
正如其他人所提到的,Qt 和 Vala 不能携手合作,但这并不意味着不可能让他们合作。它主要是关于了解幕后发生的事情。
Vala 生成 C 代码,然后将其馈送到 gcc(或其他已安装的编译器)以生成二进制文件。请注意,Vala 设计师的主要目标之一是让 Vala 生成基于 C 的库。然后这些可以被其他接受基于 C 的绑定(bind)的语言使用——Python、Ruby、Java 等等。
因此,您可以使用 Vala 编写 Qt C++ GUI 应用程序调用的基于 C 的库。 Vala 编译器生成一个 .h 文件,您的 Qt 应用程序仅 #includes。
问题在于 Qt 和 Vala 使用不同的对象系统:QObject 用于 Qt,GObject 用于 Vala。 (Vala 确实允许其他后端,甚至有人认为 Vala 会生成 Qt C++ 而不是基于 GObject 的 C,但这还遥遥无期。) QObject 和 GObject 不兼容,因此您的 QObjects 可以与 GObjects 对话,你需要做很多基于 C 的手动工作。 (用 C 语言编写 GObject 非常冗长,因此 Vala 的魅力在于隐藏所有这些。)
但这是可以完成的。请注意 Qt will even use GLib's event loop rather than its own ,允许代码混合在事件驱动的应用程序中。
我不能衷心推荐上面的,但理论上是可以的,主要是因为 C++ 代码可以很容易地调用 C 代码。
另一个值得考虑的可能性是让 Vala 代码成为 DBus 服务器,而您的 Qt 代码成为 DBus 客户端。 DBus 是一个花哨的 IPC,因此它并不适合所有应用程序,但它可能适合您的应用程序。这很有吸引力,因为 Vala 可以轻松地生成 DBus 客户端和服务器(它们看起来像普通对象)。也可以使用生成 Qt DBus 绑定(bind)的工具。请注意,这意味着您的 Vala 代码作为单独的进程运行,而不是进程内库。见 http://live.gnome.org/Vala/DBusServerSample和 http://live.gnome.org/Vala/DBusClientSamples
关于qt - 如何在 Vala 中使用 Qt GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10241802/
我是一名优秀的程序员,十分优秀!