¿Hay alguna forma de ranura de curry qt? Tal vez hay algo similar a Curryng?qt ranuras de curing
Respuesta
Puede usar QSignalMapper para enlazar algunas señales y luego conectar sus propias señales a las ranuras de destino con algunos parámetros adjuntos.
// connect signal to mapper
signalMapper = new QSignalMapper(this);
signalMapper->setMapping(button1, QString("param1"));
signalMapper->setMapping(button2, QString("param2"));
connect(button1, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(button2, SIGNAL(clicked()), signalMapper, SLOT(map()));
// connect mapper signal to slot
connect(signalMapper, SIGNAL(mapped(const QString &)), this, SLOT(originalSlot(const QString &)));
Creo que la segunda llamada 'connect' debería decir' button2', no 'button1'. Supongo que esa es la magia que haría útil esta técnica: hacer que el mapeador de señales responda de manera diferente a los remitentes únicos. – Wyck
Los argumentos de enlace no son posibles usando la señal Qt/ranuras. Deberás usar boost :: signals y boost :: bind para lograr esa funcionalidad.
LibQxt también es una opción, ver mi respuesta. –
Aunque no es posible utilizar directamente Qt, algunos enlaces/currying están disponibles a través de LibQxt. Por ejemplo, y de los documentos de QxtBoundFunction:
Por el momento, el uso esperado más común es el de proporcionar un parámetro a una ranura cuando la señal no tiene una oferta. Muchos desarrolladores nuevos en Qt intentan escribir código como este: \ code connect (botón, SIGNAL (clicked()), lineEdit, SLOT (setText ("Hello, world"))); \ endcode Los desarrolladores experimentados de Qt detectarán inmediatamente la falla aquí. La solución típica es crear una ranura de envoltura corta de una línea que invoque la función deseada. Algunos desarrolladores inteligentes de incluso pueden usar QSignalMapper para manejar espacios que solo necesitan un parámetro int o QString.
QxtBoundFunction permite a la sentencia de conexión anterior a escribirse así: \ code CONNECT (botón, la señal (hace clic()), QxtMetaObject :: bind (LineEdit, SLOT (setText (QString)), Q_ARG (QString , "¡Hola Mundo!"))); \ code Esto logra el mismo resultado sin tener que crear una nueva ranura, o peor, un objeto completo, solo para pasar un valor constante.
Además, mediante el uso de la macro QXT_BIND, los parámetros de la señal de se pueden reorganizar, omitidos, o pasan al lado de argumentos constantes proporcionadas con la macro Q_ARG. Esto se puede usar para proporcionar devoluciones de llamada con estado a una función genérica , por ejemplo.
Se pueden enlazar muchos tipos de funciones. La vinculación más común se aplica a las señales y ranuras Qt , pero también se pueden vincular las funciones C/C++ estándar. El desarrollo futuro puede agregar la capacidad de vincularse a las funciones miembro de C++, y los desarrolladores pueden crear subclases QxtBoundFunction personalizadas para una mayor flexibilidad de si es necesario.
Aunque he enviado algunos parches a LibQxt, no los he usado directamente, por lo que su kilometraje puede variar.
Por supuesto, ahora tenemos Qt 5 y la capacidad de conectarse a las señales de los objetos que se puede llamar arbitrarias:
connect(sender, &MyClass::mySignal, receiver, std::bind(&OtherClass::mySlot, boundArg));
connect(sender, &MyClass::mySignal, receiver, [=] { receiver->mySlot(boundArg); });
- 1. ¿Qt admite ranuras virtuales puras?
- 2. Visualizar señales QT y ranuras
- 3. Qt - ranuras emisoras en lugar de señales
- 4. Oscilación - reemplazo de la señal Qt/ranuras
- 5. ¿Cómo implementa Qt señales y ranuras?
- 6. Debug Qt señales, ranuras y conexiones
- 7. Uso de señales Qt y ranuras con herencia múltiple
- 8. señales de Qt y ranuras, roscas, app.exec(), y consultas relacionadas
- 9. Señales y ranuras, patrón de diseño en Qt?
- 10. Qt - Ranuras para padres del widget de llamadas
- 11. Qt pregunta: ¿Cómo funcionan las señales y las ranuras?
- 12. Cómo usar enumeraciones en las señales y ranuras Qt
- 13. Uso de ranuras anidados (#)
- 14. ¿Cuál es la expresión correcta de Qt para exponer señales/ranuras de widgets contenidos?
- 15. ¿Las señales y ranuras de Qt son una forma de publicación-suscripción?
- 16. Qt: Señales y ranuras de error: undefined reference to `vtable para
- 17. Python Decapado ranuras de error
- 18. Qt use-case para la misma señal a 2 ranuras en el mismo objeto?
- 19. En Qt, ¿cómo utilizo las ranuras Q_OBJECT y señales con herencia múltiple?
- 20. ¿Cómo funciona delete and deleteLater en lo que respecta a señales y ranuras en Qt?
- 21. Algoritmo para llenar las ranuras
- 22. Ranuras MySQL en PHP/PDO
- 23. ¿Qué biblioteca de señales/ranuras C++ debo elegir?
- 24. Orden de ranuras llamadas en QObject
- 25. Argumentos de unión a señales/ranuras
- 26. usando señales boost en lugar de qt
- 27. Ranuras QT y herencia: ¿por qué mi programa intenta conectarse con el padre en lugar de la clase hija?
- 28. Cuándo usar señales y ranuras y cuándo no a
- 29. Conectar señales a ranuras con valores constantes
- 30. QT: clase Q_OBJECT templada
¿Puede usted dar un ejemplo de lo que tiene en mente? –
Parece un duplicado de http://stackoverflow.com/questions/3166051/binding-arguments-to-signals-slots –