Pagina 1 di 1
Creazione Frontend
Inviato: lun 5 gen 2009, 16:48
da Szat
Ciao a tutti
ho sempre programmato programmi eseguibili da shell. Ora mi piacerebbe imparare le QT4 quindi mi sto studiando il tutorial.
Ho un prrogramma e vorrei sviluppare una piccola GUI però non ho idea di come far comunicare le due applicazioni, quindi in pratica il motore esiste già, devo fare solo la GUI e vorrei che fossero ben staccati (due progetti diversi, il motore deve poter essere sviluppato in modo indipendente). Sono in cerca di consigli/risorse visto che non ho trovato molto su google (nemmeno qui nel forum).
Il tutto in C++ + QT4
Ciao e grazie in anticipo
Re: Creazione Frontend
Inviato: lun 5 gen 2009, 16:50
da Szat
In realtà la condizione C++ è solo provvisoria... Potrei anche decidere di fare in modo diverso. Avete presente maple? Bene il kernel è staccato dalla GUI che è fatta in java...
Re: Creazione Frontend
Inviato: lun 5 gen 2009, 17:41
da mcosta
Per rendere il core e la GUI indipendenti ci sono fondamentalmente due strade:
- Stabilire un canale di comunicazione (SOCKET, SHARED MEMORY, ECC...) e usarlo per far comunicare i due componenti
- Estrarre dal core una libreria linkabile sia dalla GUI sia dal programma a linea di comando
Re: Creazione Frontend
Inviato: lun 5 gen 2009, 18:31
da Szat
mcosta ha scritto:Per rendere il core e la GUI indipendenti ci sono fondamentalmente due strade:
- Stabilire un canale di comunicazione (SOCKET, SHARED MEMORY, ECC...) e usarlo per far comunicare i due componenti
Ciao direi che questa è la soluzione che mi piace di più... Hai voglia di fare un piccolo esempio di implementazione?
Grazie per la risposta
Re: Creazione Frontend
Inviato: lun 5 gen 2009, 19:07
da mcosta
Szat ha scritto:
Ciao direi che questa è la soluzione che mi piace di più... Hai voglia di fare un piccolo esempio di implementazione?
Grazie per la risposta
Ad esempio (usando SOCKET UDP), potresti avere nel core due thread: uno in ascolto su socket e l'altro in lettura da shell; alla ricezione di un ordine (da socket o shell) questo viene inoltrato verso il gestore degli ordini e processato.
In questo modo l'applicazione principale sarebbe indipendente dalla sorgente degli ordini.
La GUI deve a questo punto inviare comandi al core ed eventualmente riceverne risposta tramite socket UDP.
L'utilizzo di SOCKET UDP consente di
- Non preoccuparti di gestire connessioni
- Poter eseguire GUI e core su macchine diverse
Ovviamente l'esempio è banale ma penso che possa essere un buon inizio.
Ciao
Re: Creazione Frontend
Inviato: mar 6 gen 2009, 11:54
da Szat
Pensavo fosse più semplice... CI penserò se tenere la GUI staccata dal kernel...
Dovrei spendere del tempo per pensarci... Ma alla fine conviene davvero oppure no?
Re: Creazione Frontend
Inviato: mar 6 gen 2009, 14:51
da Luke
mcosta dice bene ma mi permetto di aggiungere un'alternativa: in certi casi la GUI si occupa solo di raccogliere le preferenze dell'utente, poi apre una shell ed esegue il programma (o i programmi) da linea di comando con le opzioni scelte tramite la GUI. Non è l'approccio ideale per tutti i casi, ma se il programma a linea di comando non è interattivo forse è la soluzione migliore. Per esempio è l'approccio di k3b che alla fine lancia mkisofs, cdrecord, growisofs,ecc con i parametri del caso.
Ciao
Luke
Re: Creazione Frontend
Inviato: mar 6 gen 2009, 14:58
da Blizzard
Per semplicità di esempio puoi dare un'occhiata a KSlacky InfoPKG.
È un software che ho sviluppato in questa community con qt4 ed utilizza l'ultimo approccio descritto.
Una manciata di righe di codice molto semplici. Possono essere un discreto esempio.
Trovi la discussione in questo forum o il sito su google.
Gio
In KSIP utilizzo l'approccio di aprire un terminale. Questo perchè tutte le operazioni vanno a seguito di un /bin/su. In alternativa si può fare la fork di un nuovo processo e creare una pipe per mostrare l'output del processo spawned nell'interfaccia grafica. Ti viene qualcosa alla K3B
Re: Creazione Frontend
Inviato: mar 6 gen 2009, 20:58
da lennynero
Una cosa che mi chiedevo io è come si può creare una comunicazione, magari mediante socket, core<>GUI asicrona. Mi spiego meglio: aMuleGUI connessa ad amuled mostra tutte le info in tempo (quasi)reale in qualunque momento la si utilizza...come fa a non rispettare un protocollo di handshaking rigido e mostrare sempre le info aggiornate? c'è un thread che all'occorrenza serve quella GUI fornendovi tutti i dati? o usa la memoria condivisa? Inoltre si possono linkare diverse GUI contmporaneamente al core..., questo significa che il thread si moltiplica?
Grazie in anticipo per eventuali delucidazioni.
Re: Creazione Frontend
Inviato: mer 7 gen 2009, 0:22
da Szat
Blizzard ha scritto:Per semplicità di esempio puoi dare un'occhiata a KSlacky InfoPKG.
È un software che ho sviluppato in questa community con qt4 ed utilizza l'ultimo approccio descritto.
Una manciata di righe di codice molto semplici. Possono essere un discreto esempio.
Ok ho già scaricato il sorgente. Grazie
Re: Creazione Frontend
Inviato: mer 7 gen 2009, 10:30
da ZeD
lennynero ha scritto:Una cosa che mi chiedevo io è come si può creare una comunicazione, magari mediante socket, core<>GUI asicrona.
Magari non è di diretto interesse,ma ti consiglio di spulciarti
questo thread su iclc++
