2010-12-02 9 views
36

एनयू आधारित अद्वितीय मूल्यों की पूर्व निर्धारित सूची से किसी QT कॉम्बो बॉक्स में कोई आइटम चुनने का सबसे अच्छा तरीका क्या होगा।QComboBox - आइटम के डेटा के आधार पर चयनित आइटम सेट करें

अतीत में मैं कहाँ आइटम आइटम के मूल्य के लिए चयनित संपत्ति की स्थापना द्वारा चुना जा सकता है चयन के नेट की शैली के आदी हो गए हैं जिसका आप चयन करना चाहते हैं:

cboExample.SelectedValue = 2; 

वहाँ वैसे भी यह करने के लिए है क्यूटी के साथ आइटम के डेटा के आधार पर, यदि डेटा सी ++ गणना है?

उत्तर

76

आप findData के साथ डेटा का मूल्य देखने के लिए और फिर का उपयोग setCurrentIndex

QComboBox* combo = new QComboBox; 
combo->addItem("100",100.0); // 2nd parameter can be any Qt type 
combo->addItem ..... 

float value=100.0; 
int index = combo->findData(value); 
if (index != -1) { // -1 for not found 
    combo->setCurrentIndex(index); 
} 
+0

+1, आप हालांकि डेटा सेट करने का तरीका उल्लेख करना चाहिए। –

21

तुम भी विधि findText QComboBox से (स्थिरांक QString & पाठ) पर एक नज़र हो सकता है; यह उस तत्व की अनुक्रमणिका देता है जिसमें दिए गए पाठ होते हैं, (-1 यदि नहीं मिला)। इस विधि का उपयोग करने का लाभ यह है कि जब आप कोई आइटम जोड़ते हैं तो आपको दूसरा पैरामीटर सेट करने की आवश्यकता नहीं होती है।

/* Create the comboBox */ 
QComboBox *_comboBox = new QComboBox; 

/* Create the ComboBox elements list (here we use QString) */ 
QList<QString> stringsList; 
stringsList.append("Text1"); 
stringsList.append("Text3"); 
stringsList.append("Text4"); 
stringsList.append("Text2"); 
stringsList.append("Text5"); 

/* Populate the comboBox */ 
_comboBox->addItems(stringsList); 

/* Create the label */ 
QLabel *label = new QLabel; 

/* Search for "Text2" text */ 
int index = _comboBox->findText("Text2"); 
if(index == -1) 
    label->setText("Text2 not found !"); 
else 
    label->setText(QString("Text2's index is ") 
        .append(QString::number(_comboBox->findText("Text2")))); 

/* setup layout */ 
QVBoxLayout *layout = new QVBoxLayout(this); 
layout->addWidget(_comboBox); 
layout->addWidget(label); 
+0

findText() का उपयोग करना कभी अच्छा नहीं होता है। findData() पसंदीदा तरीका होना चाहिए। – hfrmobile

+2

आपका कथन विरोधाभासी है। मैं मानता हूं कि findData "पसंदीदा" तरीका होना चाहिए, लेकिन एकमात्र तरीका नहीं है। मैं एक मौजूदा सिस्टम के लिए तर्क लिख रहा हूं जो कभी-कभी शून्य डेटा मानों के साथ "सरल" combobox सामग्री बनाता है। तो आम तौर पर पाते हैंडेटा पर्याप्त है, लेकिन कभी-कभी आपको खोजने के लिए कोई "डेटा" नहीं होने पर खोजने की आवश्यकता होती है। – TheGerm

1

आप कॉम्बो बॉक्स है कि आप चयन करना चाहते में पाठ पता है, सिर्फ इतना है कि आइटम का चयन करने setCurrentText() विधि का उपयोग करते हैं:

यह एक छोटा सा उदाहरण है।

ui->comboBox->setCurrentText("choice 2"); 

क्यूटी 5.7 प्रलेखन

सेटर setCurrentText() से बस setEditText कॉल() यदि कॉम्बो बॉक्स संपादन योग्य है। अन्यथा, यदि सूची में कोई मिलान करने वाला टेक्स्ट है, तो वर्तमान इंडेक्स इसी अनुक्रमणिका में सेट है।

तब तक जब तक कॉम्बो बॉक्स संपादन योग्य नहीं है, फ़ंक्शन कॉल में निर्दिष्ट टेक्स्ट कॉम्बो बॉक्स में चुना जाएगा।

संदर्भ: http://doc.qt.io/qt-5/qcombobox.html#currentText-prop

+0

ui-> combobox-> setCurrentText ("विकल्प") मान्य और सरल विधि है! – sonichy

+0

शायद यह ध्यान देने योग्य मूल्य Qt 4.x में उपलब्ध नहीं है, कम से कम 4.8 नहीं – Hawkins