Anyway, try this:
Qt Code:
  1. #include <QtGui>
  2.  
  3.  
  4. class SignalTracker : public QObject {
  5. int qt_metacall(QMetaObject::Call call, int id, void **args) {
  6. id = QObject::qt_metacall(call, id, args);
  7. if(id==-1 || call != QMetaObject::InvokeMetaMethod)
  8. return id;
  9. if(!m_slots.contains(id)) return -1;
  10. Signal sig = m_slots.value(id);
  11. qDebug() << "Object:" << sig.source->objectName() << "signal:" << sig.signal;
  12. return -1;
  13. }
  14. public:
  15. SignalTracker(QObject *parent = 0) : QObject(parent) {
  16. m_slotId = 0;
  17. }
  18. bool connectSignal(QObject *obj, const char *signal) {
  19. QByteArray theSignal = QMetaObject::normalizedSignature(signal);
  20. int signalId = obj->metaObject()->indexOfSignal(theSignal);
  21. if(signalId == -1) {
  22. return false;
  23. }
  24. m_slots[++m_slotId] = Signal(obj, theSignal);
  25. QMetaObject::connect(obj, signalId, this, QObject::metaObject()->methodCount()+m_slotId);
  26. return true;
  27. }
  28. private:
  29. int m_slotId;
  30. struct Signal {
  31. QObject *source;
  32. QByteArray signal;
  33. Signal(QObject *src, const QByteArray &ba) : source(src), signal(ba){}
  34. Signal() : source(0){}
  35. };
  36. QHash<int,Signal> m_slots;
  37. };
  38.  
  39. int main(int argc, char **argv){
  40. QApplication app(argc, argv);
  41. SignalTracker tracker;
  42. QPushButton button("Click me");
  43. button.setObjectName("some button");
  44. tracker.connectSignal(&button, "clicked()");
  45. button.show();
  46. le.setObjectName("some line edit");
  47. tracker.connectSignal(&le, "textChanged(const QString &)");
  48. le.show();
  49. return app.exec();
  50. };
To copy to clipboard, switch view to plain text mode