2011-03-04 16 views
8

मैं अपने स्थानीय ग्लासफ़िश स्थापना पर .ear और .war फ़ाइलों को तैनात करने के लिए एक छोटा गुई बनाने की कोशिश कर रहा हूं। इसलिए मैंने युद्ध/कान फ़ाइल का पता लगाने के लिए फ़ाइल संवाद बॉक्स लाने के लिए फ़ाइल नाम फ़ील्ड, एक चेकबॉक्स और एक बटन लाने वाली पांच पंक्तियां बनाई हैं। यह अच्छा होगा कि सभी बटन को एक ही फ़ंक्शन पर कॉल करें और फ़ंक्शन से सॉर्ट करें जिसमें पांच कॉल किए गए बटन (सही टेक्स्ट फ़ील्ड्स को अपडेट करने के लिए)। पता नहीं है कि यह ऑब्जेक्ट उन्मुख तरीके से में ऐसा करने का इच्छित तरीका है, लेकिन मेरा एकमात्र gui प्रोग्रामिंग अनुभव कुछ पुराना win16 ईवेंट loops :) है।किसी क्लिक किए गए ईवेंट से कॉलिंग बटन कैसे प्राप्त करें

// BRG ऐन्डर्स Olme

+0

अधिकांश पाइसाइड प्रश्न क्यूटी भी हैं। यदि आप उत्तर प्राप्त करना चाहते हैं तो अपने प्रश्नों को क्यूटी टैग के साथ टैग करने पर विचार करें। यह विशेष रूप से पीसाइड के लिए सच है जो पीईक्यूटी से बहुत छोटा है और इस प्रकार कम ज्ञात है। –

+0

मेरा उत्तर यहां देखें: http://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot/5153522#5153522। 'Int' के बजाय, आप शायद 'QString' का उपयोग करना चाहेंगे। – TonyK

+0

काम करने लगता है :) – Buzzzz

उत्तर

8

कनेक्ट प्रत्येक बटन के click() एक के साथ संकेत और एक ही स्लॉट और इस स्लॉट में QObject * QObject::sender() const [protected] का उपयोग पता लगाने के लिए जो बटन संकेत (क्लिक किया गया था) भेजा है। वैकल्पिक रूप से आप QSignalMapper का उपयोग कर सकते हैं जो कि इस तरह के कार्य के लिए बनाई गई एक विशेष कक्षा है।

9
QPushButton *buttonA = new QPushButton("A"); 
QPushButton *buttonB = new QPushButton("B"); 
QPushButton *buttonC = new QPushButton("C"); 

buttonA->setObjectName("A"); 
buttonB->setObjectName("B"); 
buttonC->setObjectName("C"); 

connect(buttonA, SIGNAL(clicked()), this, SLOT(testSlot())); 
connect(buttonB, SIGNAL(clicked()), this, SLOT(testSlot())); 
connect(buttonC, SIGNAL(clicked()), this, SLOT(testSlot())); 

//Now in slot implementation 
void QWidget::testSlot() 
{ 
    QObject *senderObj = sender(); // This will give Sender object 
    // This will give obejct name for above it will give "A", "B", "C" 
    QString senderObjName = senderObj->objectName(); 

    if(senderObjName == "A") 
    { 
    //Implement Button A Specific 
    } 
    //Similarly for "B" and "C" 
    if(senderObjName == "B") 
    { 
    //Implement Button B Specific 
    } 
    if(senderObjName == "C") 
    { 
    //Implement Button C Specific 
    } 
} 

मैं इस तरह के मामले को लागू करने की वजह से कोड अधिक पठनीय है इस विधि का इस्तेमाल किया है, लेकिन यह लेने वाली स्ट्रिंग तुलना आता है के रूप में समय हो सकता है। धन्यवाद!