2009-09-02 14 views

risposta

5

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.

10

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.

+1

sacco di bravura, ma nessuna magia! mi ricorda http://catb.org/esr/jargon/html/magic-story.html – jrharshath

+0

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

Problemi correlati