2011-12-03 14 views
5

में एकाधिक विगेट्स को एक साथ मिलाएं मैं बार-बार एक परियोजना में QComboBox और QListWidget की एक जोड़ी का उपयोग कर रहा हूं। उनकी बातचीत बहुत अधिक है - जब कॉम्बो बॉक्स में कोई आइटम चुना जाता है, तो सूची किसी भी तरह से फ़िल्टर की जाती है। मैं कई संवाद बॉक्स कार्यान्वयन में इन दो विगेट्स के बीच सभी सिग्नल और स्लॉट कनेक्शन चिपकाने की प्रतिलिपि बना रहा हूं, जो मुझे नहीं लगता कि यह एक अच्छा विचार है।क्यूटी

क्या एक कस्टम विजेट बनाना संभव है, जो इन दो विजेटों को रखेगा और एक ही स्थान पर सभी सिग्नल और स्लॉट कनेक्शन होगा? कुछ इस प्रकार है:

class CustomWidget 
{ 
    QComboBox combo; 
    QListWidget list; 

    ... 
}; 

मैं इस विजेट को एक विजेट के रूप में उपयोग करना चाहता हूं।

उत्तर

11

ऐसा करने का सामान्य तरीका उप-वर्ग QWidget (या QFrame) है।

class CustomWidget: public QWidget { 
Q_OBJECT 

CustomWidget(QWidget *parent) 
    : QWidget(parent) { 
    combo = new QComboBox(...); 
    list = new QListWidget(...); 
    // create the appropriate layout 
    // add the widgets to it 
    setLayout(layout); 
} 

private: 
    QComboBox *combo; 
    QListWidget *list; 

}; 

सूची और कहा कि कस्टम विजेट में कॉम्बो (उचित स्लॉट के लिए उपयुक्त संकेतों को जोड़ने, संभवतः इस के लिए अपने स्वयं के स्लॉट को परिभाषित करते हुए) के बीच सभी बातचीत संभाल।

फिर आप समर्पित सिग्नल और स्लॉट के माध्यम से अपने कस्टम विजेट के व्यवहार/एपीआई का पर्दाफाश करते हैं, संभवतः सूची में और/या कॉम्बो में नकल करने वाले लोगों की नकल करते हैं।

Address book ट्यूटोरियल आपको कस्टम विजेट बनाने और सिग्नल और स्लॉट परिभाषित करने सहित सभी के माध्यम से चलता है।