2009-09-02 18 views

Respuesta

5

un tanto Nos respondió que en su otra pregunta

Why does Qt use its own make tool, qmake?

Pero para entrar en algo más de detalle, el MOC analiza el archivo en busca de declaraciones de señal/slot (así como las propiedades y las otras construcciones soportadas) y genera archivos de código intermedio basados ​​en esos. Estos archivos de código intermedio proporcionan un acceso fuertemente tipado a las señales y ranuras para que la biblioteca lo use para comunicarse con sus objetos.

qmake genera un archivo MAKE que incluye automáticamente estos archivos intermedios (así como cualquier UI o archivos de recursos generados) así como su propio código para que pueda construir con la cadena de herramientas que prefiera.

10

Como se ha dicho otras personas, hay muy buena documetnation Qt disponible para este tema. Si desea saber qué sucede debajo del cofre, esta información podría ayudarlo:

Las ranuras son solo métodos regulares. No hay nada especial allí, EXCEPTO moc guardará su firma en una tabla en el archivo .moc intermedio. Puede ver esta tabla con bastante claridad cuando mira este archivo.

Esta tabla le permite llamar a un método utilizando su firma. El macro SLOT(mySlot(int)) se reduce a una representación de cadena del método en cuestión. Hay varias formas de hacerlo, consulte la documentación del QMetaObject, por ejemplo.

Cuando a conecta una señal a una ranura, las firmas de señal y ranura se almacenan para un uso posterior. Cuando se emite una señal, todas las ranuras previamente conectadas a esa señal se llaman usando el método descrito anteriormente.

Si quiere saber más, le sugiero consultar el código generado por el moc y recorrer una emisión de señal y las partes internas de la llamada a connect(). Aquí no hay magia, pero hay mucha inteligencia.

+1

mucha inteligencia, pero sin magia! me recuerda a http://catb.org/esr/jargon/html/magic-story.html – jrharshath

+0

y hay 2 tipos de conexión allí. Primero: se llaman ranuras en el momento en que se emitió la señal. Y el segundo: las llamadas de tragamonedas se colocan en la cola del ciclo de eventos. Puede seleccionar manualmente el método en connect, pero la señal de conexión y las ranuras de diferentes hilos siempre están en cola. – JustAnotherCurious

Cuestiones relacionadas