2015-04-24 28 views
1

我想将一个QObject的所有信号连接到某个插槽。将一个对象的所有QT信号动态映射到一个插槽

插槽看起来是这样的:

void SignalIntercepter::signalFired() 
{ 
    std::cout << "Signal is fired!" << std::endl; 
} 

下面的代码是其中的QObject将被传递到:

void SignalIntercepter::handleObject(QObject* object) 
{ 
    const QMetaObject *me = object->metaObject(); 
    int methodCount = me->methodCount(); 
    for(int i = 0; i < methodCount; i++) 
    { 
     QMetaMethod method = me->method(i); 
     if(method.methodType() == QMetaMethod::Signal) 
     { 
      // How do I connect this signal to the slot? 
      // QObject::connect(object, ..., ..., ...); 
     } 
    } 
} 

回答

2

看看

const char * QMetaMethod::signature() const 

那么你应该可以使用它像

QObject::connect(object, method->signature(), this, SLOT(signalFired())); 

你需要的method->signature()调用之前添加"2"因为SIGNAL(a)万客隆定义SIGNAL(a) "2"#a提到Is it possible to see definition of Q_SIGNALS, Q_SLOT, SLOT(), SIGNAL() macros? (Qt)

+0

谢谢!没有“2”,它给了我一些问题。在Qt5.4中也使用method.methodSignature()来代替signature()。 QObject :: connect(object,“2”+ method.methodSignature(),this,SLOT(signalFired())); – Damnesia