Comunicazione dai componenti di livello inferiore alla GUI?

2

Qual è il modo consigliato per un componente / modulo software di livello inferiore per comunicare con la GUI? Sto usando C ++.

Ho una classe del livello di servizio che, se si verificano alcune condizioni, deve notificare l'utente, ma continuare comunque l'elaborazione. Nel caso di un errore irrecuperabile, capisco che posso usare le eccezioni per creare bolle alla GUI, ma che dire nel caso di un semplice messaggio che deve essere comunicato all'utente dove il componente di livello inferiore continua ad essere eseguito?

Aggiorna

Giusto per chiarire il livello del servizio (noto anche come logica aziendale, livello di calcolo, ecc.) che non "conosce" la GUI, né lo voglio.

    
posta User 08.03.2012 - 19:44
fonte

4 risposte

4

Puoi provare una libreria di slot di segnali:

Se non hai ancora una preferenza per una libreria della GUI, puoi provare anche Qt. Ha anche un sistema di slot di segnali molto flessibile e potente. Uno svantaggio minore è che Qt usa un preprocessore personalizzato, moc, quindi non è 100% C ++.

    
risposta data 09.03.2012 - 01:16
fonte
2

Dipende se il livello di calcolo 'sa' della GUI.
Se il livello di calcolo può utilizzare il gui toolkit, puoi pubblicare eventi personalizzati di Windows o inviare segnali Qt o qualsiasi altra cosa usi il tuo gui toolkit.

Se hai più separazione, es. il tuo thread di calcolo è scritto in puro c e non ha alcun hook di giga, quindi tipicamente fornisci una funzione di callback "c" dal gui che chiama il thread di calcolo. Se il thread di calcolo è un processo separato o ne stai monitorando molti, un meccanismo IPC come una named pipe o, nel peggiore dei casi, il tuo thread di calcolo scrive un file di stato che la gui controlla periodicamente,

    
risposta data 08.03.2012 - 20:09
fonte
2

Userei una coda di eventi o qualcosa di simile. Il tuo livello di business logic può semplicemente inviare un messaggio "qualcosa che si è rotto" sulla coda e qualsiasi altro livello che sta monitorando quella coda può prendere qualsiasi azione appropriata per loro.

    
risposta data 08.03.2012 - 22:59
fonte
0

Dipende dal tipo & quantità di dati utilizzati:

Esempio 1.

Mostra una riga di testo, alla volta, da un file di testo o da una tabella, su un controllo testo.

Esempio 2.

Visualizzazione di un singolo record / entità da una tabella, in un pannello con diversi controlli,  in cui ciascun controllo è una proprietà o un campo di un'entità. L'entità ha diversi campi o proprietà.

Esempio 3

Visualizzazione di un elenco di entità / record, in un controllo, come elenco, vista ad albero o vista griglia.

Esempio 1.

Potresti avere una funzione nella tua app., dove viene chiamata un'altra funzione, con una singola variabile di riferimento, in cui verrà memorizzato il valore.

Esempio 2.

Potresti avere una funzione nella tua app., dove viene chiamata un'altra funzione, con una singola variabile di riferimento, dove, la variabile può essere un puntatore / riferimento a una "struct" o "oggetto" che i valori stanno per essere memorizzati.

Esempio 3.

Ad esempio 3, ci sono 2 modi.

(3.1) potresti avere una funzione nella tua app., dove viene chiamata un'altra funzione, con una singola variabile di riferimento, in cui la variabile è raccolta / lista / matrice aperta, in cui ogni elemento è un'entità o un oggetto.

(3.2) potresti avere una funzione nella tua app., dove una funzione è chiamata, in un ciclo, ogni volta, una singola variabile di riferimento, dove, la variabile può essere un puntatore / riferimento a una "struct" o "oggetto" che i valori verranno memorizzati. Ogni volta che il loop viene chiamato, l'oggetto recuperato viene visualizzato in G.U.I. o aggiunto a una raccolta e, successivamente, visualizzato in G.U.I.

Saluti.

    
risposta data 09.03.2012 - 00:11
fonte

Leggi altre domande sui tag