2015-04-24 57 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