2010-01-08 12 views
5

Soy un novato total en Qt. Mientras leía el documentation, me encontré con esta configuración:Qt use-case para la misma señal a 2 ranuras en el mismo objeto?

connect(Object1, Signal1, Object2, slot1) 
connect(Object1, Signal1, Object2, slot2) 

¿Qué podría ser el caso de uso para esto?

Parece extraño para mí, proveniente de un fondo de Erlang/Python. Debe tener que ver con los giros y vueltas de la herencia de C++, supongo.

Respuesta

4

Esto es para casos en los que tiene algo así como un botón que cambia dos partes de otro. Puede sonar tonto, pero sería equivalente a llamar a la función de la segunda ranura desde la primera ranura.

Digamos que al hacer clic en el botón Reproducir/Pausa, el botón de detención se activa o se activa y también cambia la información sobre herramientas. Esto podría hacerse fácilmente con una ranura, pero es posible que desee la opción de hacerlo de forma independiente otras veces. Para promover la reutilización, utilice el método anterior para conectar una señal a 2 espacios.

+0

Gracias Adán. Sin embargo, a mí me parece tonto: promovería una abstracción en la que el emisor de la señal no necesita preocuparse por lo que debe suceder en el lado del fregadero. – jldupont

+0

@jldupont: El emisor de la señal no tiene que preocuparse por lo que debe suceder en el lado del fregadero. Simplemente emite la señal y continúa con su tarea. El que hace la conexión no tiene que ser el emisor, una conexión puede ser hecha por el receptor, o incluso por un tercero (si la señal y las ranuras son públicas). – Fred

+0

Para continuar con lo que dijo Fred, casi siempre encuentro que el receptor hace la conexión (directamente o a través de un proxy). Tener una fuente que conozca todos los sumideros directamente, de alguna manera, vence el propósito. Y como dijo Fred, recuerda que todo lo que emite la señal no importa quién lo recibe. Sin embargo, puede ejecutar el código de ranura antes de que continúe dependiendo del tipo de conexión y el enhebrado. –

3

Permitiría que otros objetos activaran slot1 y slot2 por separado.

connect(Object1, Signal1, Object2, slot1); 
connect(Object1, Signal1, Object2, slot2); 
connect(Object3, Signal1, Object2, slot1); 
connect(Object4, Signal1, Object2, slot2); 
0

en realidad es una forma muy poderosa de hacer MVC ... Digamos que usted quiere "conectar" vistas para escuchar a un objeto que emite datas más ...

Puede conectar una vista PieChart con :

connect(MySourceModel, SIGNAL(newDataAreThere()), PieChartView, SLOT(notifyNewDataReceived())); 

Más tarde, en su aplicación, otro módulo se crea y necesita, así que escuchar a los datos ... No hay problema:

connect(MySourceModel, SIGNAL(newDataAreThere()), AnotherView, SLOT(notifyNewDataReceived())); 

Puede conectar/desconectar sus puntos de vista, y el modelo ni siquiera sabe que están escuchando a él ... Ese no es su problema ...

espero que mi pequeño ejemplo es comprensible;)

+0

gracias por su contribución ** pero ** ¿esto leyó cuidadosamente la pregunta? – jldupont

+0

Oups, sí, leí demasiado rápido tu pregunta ... ¡Lo siento! –

Cuestiones relacionadas