Come altri hanno già detto, Qt e Vala non funzionano mano nella mano, ma ciò non significa che sia impossibile convincerli a collaborare. Si tratta principalmente di capire cosa succede sotto le copertine.
Vala genera un codice C che viene quindi inviato a gcc (o un altro compilatore installato) per produrre un binario. Si noti che uno degli obiettivi principali dei designer Vala era che Vala producesse librerie basate su C. Questi possono quindi essere utilizzati da altri linguaggi che accettano i collegamenti basati su C: Python, Ruby, Java e così via.
Quindi, è possibile utilizzare Vala per codificare una libreria basata su C in cui viene richiamata l'applicazione della GUI Qt C++. Il compilatore Vala produce un file .h che la tua app Qt si limita semplicemente #include.
Il problema è che Qt e Vala utilizzano diversi sistemi di oggetti: QObject per Qt, GObject per Vala. (Vala consente altri backend, e c'è anche qualche idea su Vala che produce Qt C++ invece di C basato su GObject, ma è molto lontano nel futuro.) QObject e GObject non sono compatibili, e così QObjects può parlare con GObjects, hai bisogno di fare un sacco di lavoro manuale basato su C. (Scrivere GObject in C è abbastanza dettagliato, da qui il fascino di Vala per nasconderlo.)
Ma può essere fatto. Notare che Qt will even use GLib's event loop rather than its own, consentendo al codice di convertire in un'applicazione basata su eventi.
Non posso raccomandare caldamente quanto sopra, ma in teoria è possibile, soprattutto perché il codice C++ può facilmente chiamare codice C.
Un'altra possibilità da prendere in considerazione è rendere il codice Vala un server DBus e il codice Qt un client DBus. DBus è un IPC elegante e quindi non è adatto a tutte le applicazioni, ma potrebbe essere per il tuo. È interessante perché Vala può facilmente produrre client e server DBus (sembrano oggetti ordinari). Sono disponibili anche strumenti per produrre associazioni Qt DBus. Nota che questo significa che il tuo codice Vala viene eseguito come processo separato e non è una libreria in-process. Vedere http://live.gnome.org/Vala/DBusServerSample e http://live.gnome.org/Vala/DBusClientSamples
fonte
2012-04-25 23:58:06
Non penso ci siano associazioni Vala per Qt. – Mat
Non penso neanche io e non vedo la motivazione per questo genere di cose. In un certo senso, Qt sta a C++ quello che Vala sta per C (o in modo più specifico, l'API di Gnome C). Di solito le persone andrebbero solo a seconda di cosa sono più a loro agio. – teukkam
Quindi non c'è modo di farlo? – RobinJ