Как использовать Qt GUI с Vala?

Я нашел ноль документация по этому вопросу (я искал в неправильных местах? Мне это кажется странным).

Мне просто нужно иметь возможность использовать Qt GUI для моего приложения Vala. Хотелось бы привести пример.

2 ответов


Как упоминали другие, Qt и Vala не работают рука об руку, но это не означает, что невозможно заставить их сотрудничать. Главное-понять, что происходит под одеялом.

Vala генерирует код C, который затем подается в gcc (или другой установленный компилятор) для создания двоичного файла. Обратите внимание, что одной из главных целей дизайнеров Vala было создание библиотек на основе C. Затем они могут использоваться другими языками, которые принимают привязки на основе C -- Python, Ruby, Java и так далее.

таким образом, Вы можете использовать Vala для кодирования библиотеки на основе C, которую вызывает ваше приложение Qt C++ GUI. Компилятор Vala создает .H файл, который ваше приложение Qt просто #включает.

проблема в том, что Qt и Vala используют разные объектные системы: QObject для Qt, GObject для Vala. (Vala допускает другие бэкэнды, и есть даже некоторые мысли о том, что Vala производит Qt C++ вместо GObject-based C, но это далеко в будущем.) QObject и GObject несовместимы, и поэтому для того, чтобы ваши QObjects разговаривали с GObjects, вам нужно выполнить много ручной работы на основе C. (Написание GObject в C довольно многословно, поэтому очарование вала, чтобы скрыть все это.)

но это можно сделать. Обратите внимание, что Qt даже будет использовать цикл событий GLib, а не свой собственный, что позволяет коду объединяться в приложении, управляемом событиями.

Я не могу сердечно рекомендовать выше, но теоретически это возможно, в основном потому, что C++ код может легко вызвать код на C.

другая возможность, рассмотрите делают вала код ДГУ сервера и кода Qt в ДГУ клиента. DBus-это причудливый IPC, и поэтому он не подходит для всех приложений, но может быть для вашего. Это привлекательно, потому что Vala может легко создавать клиенты и серверы DBus (они выглядят как обычные объекты). Также доступны инструменты для создания Привязок Qt DBus. Обратите внимание, что это означает, что ваш код вала выполняется как отдельный процесс и не библиотека в процессе. См.http://live.gnome.org/Vala/DBusServerSample и http://live.gnome.org/Vala/DBusClientSamples


Это не совсем то, что вы хотите, но взгляните на https://live.gnome.org/GObjectIntrospection/GObjectConsume Это приводит GObject-introspection к C++. С GObjectConsume вы можете использовать свою библиотеку vala на C++ и qt.