2012-01-01 16 views
6
void MainWindow::addRadioToUI() 
{  int button_cunter=4; 
     while(!database.isEmpty()) 
     {  button_cunter++; 

       QPushButton *one = new QPushButton("Play: "+name(get_r.getTrackId())); 
       one->setIcon(QIcon(":/images/play_button.png")); 
       one->setMaximumWidth(140); 
       one->setFlat(true); 

       QGroupBox* get_rGB = new QGroupBox("somethink"); 
       QFormLayout* layout = new QFormLayout; 
       if(button_cunter%5 == 0){ 
        layout->addWidget(one); 

       } 

       get_rGB->setLayout(layout); 
       scrollAreaWidgetContents->layout()->addWidget(get_rGB); 

     } 
} 

मेरे पास कुछ QPushButtons हैं जो स्वचालित रूप से जोड़े गए हैं। क्या बटन पर "आईडी विशेषता या अन्यथा" जोड़ने का कोई तरीका है और अगला पता है कि कौन सा बटन क्लिक किया गया था? मेरे पास प्रत्येक बटन के लिए अलग-अलग कार्रवाई है।क्यूटी, पुशबटन, आईडी विशेषता? यह जानने के लिए कि कौन सा बटन क्लिक किया गया था

उत्तर

5

QApplicationsender() प्रदान करता है जिसमें कौन सा ऑब्जेक्ट सिग्नल भेजता है। तो अगर आप कर सकते हैं:

//slot, this could also be done in a switch 
if(button[X] == QApplication::sender()){ 
    doX(); 
}else if(button[Y] == QApplication::sender()){ 
    doY(); 
} 

http://doc.qt.io/qt-4.8/qobject.html#sender

5

QSignalMapper बात के इस प्रकार के लिए बहुत अच्छा है।

आप उदाहरण के लिए इस तरह से अपनी स्लॉट निर्धारित करना होगा:

public slots: 
    void clicked(int buttonId); // or maybe trackId 

फिर अपने वर्ग के लिए एक QSignalMapper* सदस्य जोड़ सकते हैं और यह है कि स्लॉट से कनेक्ट: बनाने के बाद addRadioToUI में

signalMapper = new QSignalMapper(this); 
    connect(signalMapper, SIGNAL(mapped(int)), 
      this,   SLOT(clicked(int))); 

, अपने पुश बटन, करें:

signalMapper.setMapping(one, button_cunter); 
          // or trackId if that's more practical 

यदि आपको केवल आवश्यकता है यद्यपि सिग्नल ट्रिगर करने वाले ऑब्जेक्ट के लिए एक पॉइंटर है, आप उस पर हैंडल प्राप्त करने के लिए अपने स्लॉट में स्थिर QOjbect::sender फ़ंक्शन का उपयोग कर सकते हैं।

+0

'सिग्नलमैपर' के निर्माण के बाद, आपको उन सभी संकेतों को प्राप्त करने की आवश्यकता है जिन्हें आप भेजना चाहते हैं। आपको 'कनेक्ट (यूई-> पुशबटन_1, सिग्नल (क्लिक किया गया)), सिग्नल मैपर, एसएलओटी (मैप()) जैसे कॉल की आवश्यकता होगी;' सिग्नलमैपर 'के ठीक बाद बनाया गया है और यह उन सभी ऑब्जेक्ट्स के लिए दोहराया जाना चाहिए जिन्हें आप चाहते हैं यह प्राप्त करने के लिए। – zar

2

QButtonGroup का उपयोग करें। जब बटन को जोड़ा जाता है तो यह पैरामीटर के रूप में आईडी लेता है और समूह में एक बटन दबाए जाने पर आईडी को स्लॉट पर प्रदान करता है।

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

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