Las dos maneras de conectar un QAction con un slot:
1. Moderna sintaxis de conexiones tipo-safe (seguras) introducida en Qt5, utilizando punteros a funciones miembro.
connect(_actionBorrar, &QAction::triggered, this, &MainWindow::borrarChapter);
&QAction::triggered: Es un puntero a la función miembro triggered de la clase QAction.
&MainWindow::borrarChapter: Es un puntero a la función miembro borrarChapter de la clase MainWindow. borrarChapter es un slot personalizado que contiene el código que se ejecutará cuando se conecte a una señal y esta se emita
Con la nueva sintataxis en la declaracion de la clase los bloques signals: y public slots: son opcionales. Las señales no tienen que estar bajo una etiqueta signals, pero deben ser declaradas como funciones miembro sin implementación.
Ventajas sobre la sintaxis antigua:
Verificación en tiempo de compilación: Si la señal o el slot no existen o no coinciden en sus tipos de argumentos, el compilador generará un error. Esto ayuda a detectar errores antes de que se ejecute el programa.
Mayor legibilidad: Al utilizar punteros a funciones miembro, queda más claro qué función de qué objeto se está conectando.
Soporte para funciones lambda: Con esta sintaxis, puedes conectar una señal directamente a una función lambda en lugar de tener que definir un slot separado.
2. Tradicional sintaxis de conexiones basadas en macros:
connect(_actionBorrar, SIGNAL(triggered()), this, SLOT(borrarChapter()));
Desventajas en comparación con la sintaxis tipo-safe:
- Verificación en tiempo de ejecución: Si la señal o el slot no existen o no coinciden en sus tipos de argumentos, el error solo se detectará en tiempo de ejecución, lo que puede dificultar la depuración y aumentar la probabilidad de errores.
- Menos legibilidad: Las macros SIGNAL() y SLOT() hacen que el código sea menos claro y más difícil de entender en comparación con la sintaxis basada en punteros a funciones miembro.
- No hay soporte para funciones lambda: Esta sintaxis solo permite conectar señales a slots definidos previamente en una clase.
No hay comentarios:
Publicar un comentario