Desarrollo una aplicación en PyQt, me gusta el modelo de ranura de señal, pero ¿hay alguna forma de determinar el emisor de señal ? Espero que haya una manera, porque permitirá escribir un código más genérico sin definir muchas ranuras para cada señal similar.¿Cómo se determina quién emitió la señal?
Respuesta
Creo que abrí una pregunta demasiado pronto, porque encontré una respuesta en google solo. Cuando ranura se activa por el emisor, el puntero de emisor almacenados, y pueden ser recuperados por
QObject::sender()
y como resultado se puede acceder en PyQt por:
@QtCore.pyqtSlot()
def someSlot(self):
self.sender()
Debe tener en cuenta el waring en la documentación antes de usar esta función: http://doc.qt.nokia.com/4.7/qobject.html#sender –
Patrice aquí está el enlace actualizado: https: // qt-project .org/doc/qt-4.7/qobject.html # remitente – neuronet
cuenta que esto no hace decirte, por ejemplo. qué celda se controló en la cuadrícula, solo el control de la cuadrícula en sí.
Hay un nuevo libro de avanzada Qt fuera que entra en muchos detalles acerca avanzado de señal/ranura de enrutamiento
Es posible que desee ver en la clase QSignalMapper, ya que proporciona un medio para asociar ya sea un entero, cadena, o parámetros del widget a un objeto que envía una señal dada. La principal limitación es que la señal/ranura que se mapea debe ser sin parámetros.
C++ ejemplo de la QT4.7 documentation:
ButtonWidget::ButtonWidget(QStringList texts, QWidget *parent)
: QWidget(parent)
{
signalMapper = new QSignalMapper(this);
QGridLayout *gridLayout = new QGridLayout;
for (int i = 0; i < texts.size(); ++i) {
QPushButton *button = new QPushButton(texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, texts[i]);
gridLayout->addWidget(button, i/3, i % 3);
}
connect(signalMapper, SIGNAL(mapped(const QString &)),
this, SIGNAL(clicked(const QString &)));
setLayout(gridLayout);
}
Usted puede encontrar un ejemplo PyQt4 here, sin embargo, cuando tengo la oportunidad voy a tratar de añadir un ejemplo sencillo PyQt4.
- 1. ¿Cómo se emitió de char * a T *?
- 2. ¿Cómo se determina la intensidad de la señal cuando GSM devuelve '99'?
- 3. ¿Cómo se determina cuando Windows termina de reiniciar?
- 4. Seguimiento de orígenes de señal UNIX?
- 5. ¿Cómo se determina la altura de la cadena en PostScript?
- 6. ¿Cómo se determina la clase de la propiedad Objective-C?
- 7. ¿Cómo se determina el tamaño del proceso?
- 8. ¿Cómo se determina si CKEditor está cargado?
- 9. ¿Cómo se determina una SoapAction válida?
- 10. ¿Cómo se determina Ruby LOAD_PATH predeterminado?
- 11. ¿Cómo manejar la señal SIGABRT?
- 12. ¿Cómo se determina la clase de un tipo genérico?
- 13. ¿Cómo se determina la longitud de una cadena gráfica?
- 14. ¿Cómo se determina la antigüedad del archivo con PHP?
- 15. ¿Cómo se determina la velocidad de un dispositivo Android?
- 16. ¿Cómo se determina la longitud de una trama Ethernet II?
- 17. ¿Cómo se determina si la referencia del objeto es nula?
- 18. ¿Cómo se determina la longitud de un char * sin signo?
- 19. ¿Determina si LTE está encendido?
- 20. C# HttpWebRequest - ¿Cómo se determina si se realizó HTTP 301?
- 21. ¿Cómo sabes quién está arreglando la compilación?
- 22. Oscilación - reemplazo de la señal Qt/ranuras
- 23. Quién debe quién optimización de dinero
- 24. ¿Cómo desconectar la señal de Gtk?
- 25. cómo encontrar quién bloquea quién en SQL Server 2005
- 26. Cómo agotar la adquisición de señal GPS
- 27. Android Multitouch - ¿Determina qué dedo se levantó?
- 28. Cómo capturar la señal de Control + D?
- 29. ¿Cómo se determina el tamaño/marco de un UINavigationItem.titleView personalizado?
- 30. ¿Cómo se determina si una lista bidimensional contiene un valor?
Estoy realmente sorprendido de que alguien diga que requerir información sobre un remitente en la ranura hace que el código sea * más * genérico. En general, los espacios se escriben de modo que no requieren ningún conocimiento de cómo se activaron (es decir, también podrían llamarse como métodos directamente). –