당신이 목적지에 위젯을 사용하여 응용 프로그램 QApplication::allWidgets()
.
그런 다음,목록 수있는 모든 신호를 각각의 위젯( QObject::metaObject()
다)및 그들을 연결하는 logger.
간단한 예제:
class Spy: public QObject {
Q_OBJECT
public:
Spy();
public slots:
void log();
};
void Spy::log()
{
auto i = senderSignalIndex(); // The signal that fired this slot
auto signal = sender()->metaObject()->method(i);
qDebug() << sender() << signal.methodSignature();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
Spy* spy = new Spy();
QMetaMethod log = spy->metaObject()->method(spy->metaObject()->indexOfSlot("log()")); // in order to use the right QObject::connect signature
for (auto widget: a.allWidgets())
{
auto metaObject = widget->metaObject();
for (int i = 0; i != metaObject->methodCount(); ++i)
{
auto method = metaObject->method(i);
if (method.methodType() != QMetaMethod::Signal) // We want to connect all the signals. We don't care about the other methods
continue;
widget->connect(widget, method, spy, log);
}
}
return a.exec();
}
당신을 개선해야 하는 경우에는 코드를 매개변수를 표시.
필터링할 수도 있습니다 개체 로그만 중요한 신호를(예,만 기록 clicked
에서 신호 버튼 사용)