2010-10-28 9 views
42

एक स्लॉट से एक से अधिक संकेतों को बांधना संभव है (है ना?)। तो, क्या यह समझने का कोई तरीका है कि कौन सा विजेट सिग्नल भेजता है? मैं sender की घटनाओं की तलाश कर रहा हूं जैसे .NETसिग्नल/स्लॉट तंत्र के साथ प्रेषक विजेट कैसे प्राप्त करें?

उत्तर

5

हां, आप एक स्लॉट पर एकाधिक सिग्नल कनेक्ट कर सकते हैं। इस मामले में आप सिग्नल के स्रोतों को अलग करने के लिए QSignalMapper का उपयोग करेंगे। यह समाधान पैरामीटर रहित सिग्नल तक ही सीमित है। आप एक उदाहरण here देख सकते हैं।

+0

लिंक मर चुका है ... – MDMoore313

+1

फिक्स्ड लिंक। धन्यवाद! –

+0

लिंक फिर से मर चुका है = [ – Troyseph

97

उपयोग QObject::sender() स्लॉट में, निम्न उदाहरण की तरह:

void MainWindow::someSetupFunction(void) 
{ 
    ... 
    connect(_foobarButton, SIGNAL(clicked()), this, SLOT(buttonPressedSlot())); 
} 

void MainWindow::buttonPressedSlot() 
{ 
    // e.g. check with member variable _foobarButton 
    QObject* obj = sender(); 
    if(obj == _foobarButton) 
    { 
     ... 
    } 

    // e.g. casting to the class you know its connected with 
    QPushButton* button = qobject_cast<QPushButton*>(sender()); 
    if(button != NULL) 
    { 
     ... 
    } 

} 
+11

+1। – MDMoore313

+1

सादे गतिशील_कास्ट से बेहतर qobject_cast नहीं है? – elephant

+1

@elephant हां, जैसा कि http://doc.qt.io/qt-4.8/metaobjects.html पर दिया गया है। जवाब में यह सुधार किया जाना चाहिए। – Johannes

संबंधित मुद्दे