#include <QtGui>
class SignalTracker
: public QObject { int qt_metacall
(QMetaObject::Call call,
int id,
void **args
) { id
= QObject::qt_metacall(call, id, args
);
return id;
if(!m_slots.contains(id)) return -1;
Signal sig = m_slots.value(id);
qDebug() << "Object:" << sig.source->objectName() << "signal:" << sig.signal;
return -1;
}
public:
m_slotId = 0;
}
bool connectSignal
(QObject *obj,
const char *signal) { int signalId = obj->metaObject()->indexOfSignal(theSignal);
if(signalId == -1) {
return false;
}
m_slots[++m_slotId] = Signal(obj, theSignal);
return true;
}
private:
int m_slotId;
struct Signal {
Signal() : source(0){}
};
QHash<int,Signal> m_slots;
};
int main(int argc, char **argv){
SignalTracker tracker;
button.setObjectName("some button");
tracker.connectSignal(&button, "clicked()");
button.show();
le.setObjectName("some line edit");
tracker.connectSignal(&le, "textChanged(const QString &)");
le.show();
return app.exec();
};
#include <QtGui>
class SignalTracker : public QObject {
int qt_metacall(QMetaObject::Call call, int id, void **args) {
id = QObject::qt_metacall(call, id, args);
if(id==-1 || call != QMetaObject::InvokeMetaMethod)
return id;
if(!m_slots.contains(id)) return -1;
Signal sig = m_slots.value(id);
qDebug() << "Object:" << sig.source->objectName() << "signal:" << sig.signal;
return -1;
}
public:
SignalTracker(QObject *parent = 0) : QObject(parent) {
m_slotId = 0;
}
bool connectSignal(QObject *obj, const char *signal) {
QByteArray theSignal = QMetaObject::normalizedSignature(signal);
int signalId = obj->metaObject()->indexOfSignal(theSignal);
if(signalId == -1) {
return false;
}
m_slots[++m_slotId] = Signal(obj, theSignal);
QMetaObject::connect(obj, signalId, this, QObject::metaObject()->methodCount()+m_slotId);
return true;
}
private:
int m_slotId;
struct Signal {
QObject *source;
QByteArray signal;
Signal(QObject *src, const QByteArray &ba) : source(src), signal(ba){}
Signal() : source(0){}
};
QHash<int,Signal> m_slots;
};
int main(int argc, char **argv){
QApplication app(argc, argv);
SignalTracker tracker;
QPushButton button("Click me");
button.setObjectName("some button");
tracker.connectSignal(&button, "clicked()");
button.show();
QLineEdit le;
le.setObjectName("some line edit");
tracker.connectSignal(&le, "textChanged(const QString &)");
le.show();
return app.exec();
};
To copy to clipboard, switch view to plain text mode
Bookmarks