Come funzionano i segnali e le slot con un'astrazione di alto livello?Domanda Qt: come funzionano i segnali e le slot?
Come vengono implementati segnali e slot con un'astrazione di alto livello?
Come funzionano i segnali e le slot con un'astrazione di alto livello?Domanda Qt: come funzionano i segnali e le slot?
Come vengono implementati segnali e slot con un'astrazione di alto livello?
realtà ho letto questa pagina Qt su di esso, e fa un buon lavoro di spiegare:
Abbiamo un po 'risposto in altra domanda
Why does Qt use its own make tool, qmake?
Ma per andare in un po' più in dettaglio, il MOC analizza il file alla ricerca di segnali di dichiarazioni/Slot (così come le proprietà e gli altri costrutti supportati) e genera file di codice intermedi basati su quelli. Questi file di codice intermedi forniscono un accesso fortemente digitato ai segnali e agli slot per la libreria da utilizzare per comunicare con gli oggetti.
qmake genera un makefile che include automaticamente questi file intermedi (oltre a qualsiasi UI o file di risorse generati) nonché il proprio codice in modo che sia possibile creare con la propria catena di strumenti prescelta.
Come altre persone hanno detto, c'è molto buona documetnation Qt per questo argomento. Se vuoi sapere cosa succede sotto il cofano, questa informazione potrebbe aiutarti:
Gli slot sono solo metodi regolari. Niente di speciale lì, SALVO moc salverà la propria firma in una tabella nel file .moc intermedio - puoi vedere questa tabella abbastanza chiaramente quando guardi questo file.
Questa tabella consente di chiamare un metodo utilizzando la propria firma. La macro SLOT(mySlot(int))
si riduce a una rappresentazione di stringa del metodo in questione. Esistono vari modi per farlo, consultare la documentazione per QMetaObject ad esempio.
Quando si collega un segnale a uno slot, il segnale e le segnature degli slot vengono memorizzati per un uso successivo. Quando viene emesso un segnale, tutti gli slot precedentemente collegati a quel segnale sono chiamati usando il metodo descritto sopra.
Se vuoi saperne di più, ti suggerisco di guardare attraverso il codice generato da moc e di passare attraverso un'emissione di segnale e gli interni della chiamata connect(). Non c'è magia qui, ma c'è un sacco di intelligenza.
sacco di bravura, ma nessuna magia! mi ricorda http://catb.org/esr/jargon/html/magic-story.html – jrharshath
E ci sono 2 tipi di connessione lì. Il primo: gli slot sono chiamati al momento in cui il segnale è stato emesso. E la seconda: le chiamate di slot sono piazzate nella coda del ciclo di eventi. È possibile selezionare manualmente il metodo in connessione, ma la connessione del segnale e gli slot da thread diversi vengono sempre messi in coda. – JustAnotherCurious
Questa è davvero una spiegazione molto bella.
ottengo prurito su questo ortografia troppo .. Dio sa perché – jrharshath