2012-04-20 18 views
6

Ho trovato zero documentazione su questo argomento (Sono stato a cercare nei posti sbagliati? Mi sembra strano).Come utilizzare una GUI Qt con Vala?

Ho semplicemente bisogno di essere in grado di utilizzare una GUI Qt per la mia applicazione Vala. Un esempio sarebbe apprezzato.

+0

Non penso ci siano associazioni Vala per Qt. – Mat

+0

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

+0

Quindi non c'è modo di farlo? – RobinJ

risposta

13

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

Problemi correlati