मैं क्यूकॉम्बोबॉक्स से चयनित वैल्यू कैसे प्राप्त कर सकता हूं?


86

क्यूटी में, मैं प्राप्त कर सकते हैं selected textएक के QComboBoxका उपयोग करके combobox->currentText()विधि। मैं कैसे प्राप्त कर सकता हूं selected value?

मैंने मदद के लिए खोज की, लेकिन मुझे कोई ऐसा तरीका नहीं मिला currentData()जिसकी मुझे उम्मीद थी। मैं ही पा सकाcombobox->currentIndex()

क्या इसके अलावा इसे करने का कोई स्मार्ट तरीका है combobox->itemData(combobox->currentIndex())?

अद्यतन: यह अब क्यूटी 5 के रूप में आवश्यक नहीं है। एक currentData()विधि http://doc.qt.io/qt-5/qcombobox.html#currentData-prop जोड़ा गया है

जवाबों:


85

ऐसा लगता है कि combobox->itemData(combobox->currentIndex())यदि आपको QComboBox का वर्तमान डेटा प्राप्त करना है तो आपको इसकी आवश्यकता होगी ।

यदि आप QComboBox से प्राप्त अपने स्वयं के वर्ग का उपयोग कर रहे हैं, तो आप एक currentData()फ़ंक्शन जोड़ सकते हैं ।


2
धन्यवाद। मैंने सिर्फ अपने कार्यक्रम में इस टिप का इस्तेमाल किया है।
ब्रायन स्टीनर

1
@Patrice Bernassola हालांकि 'QVariant' प्रकार का स्विच ऑपरेशन: combobox->itemData(combobox->currentIndex())अवैध है !!! क्यों ?
द बीस्ट

अगर कुछ नहीं चुना जाता है तो यह काम नहीं करता है currentIndex = -1। यदि QComboBox खाली है, तो यह या तो अंतिम इंडेक्स से डेटा लौटाएगा या एक त्रुटि बढ़ाएगा।
जॉनसन

25

यह एक वर्तमान सूचकांक का पाठ प्राप्त कर सकता है:

QString cb = cbChoice ->currentText();

1
यह कैसे मदद करता है? currentTextक्या ओपी पहले से ही अवगत है ...
Aconcagua

22

आप सभी वस्तुओं के लिए QVariant डेटा सेट कर सकते हैं, तब आपको आवश्यकता पड़ने पर मूल्य मिल सकता है।

इस स्थिति के लिए एक उदाहरण कोड है:

ui.comboBoxSheetSize->addItem("128 m", QVariant(128));
ui.comboBoxSheetSize->addItem("256 m", QVariant(256));
ui.comboBoxSheetSize->addItem("512 m", QVariant(512));
ui.comboBoxSheetSize->addItem("1024 m", QVariant(1024));

...

void Page::onComboSheetSizeChanged( int index )
{
 int value = ui.comboBoxSheetSize->itemData(index).toInt();
}

वैसे, मुझे लगता है कि मैं आपके सवाल को गलत समझा। मुझे लगता है कि आपके पास डेटा प्राप्त करने का तरीका काफी स्मार्ट है?




3

क्यूटी 4.7 में यह मेरा ओके कोड है:

 //add combobox list 
    QString val;
   ui->startPage->clear();
    val = "http://www.work4blue.com";
    ui->startPage->addItem(tr("Navigation page"),QVariant::fromValue(val));
    val = "https://www.google.com";
    ui->startPage->addItem("www.google.com",QVariant::fromValue(val));
    val = "www.twitter.com";
    ui->startPage->addItem("www.twitter.com",QVariant::fromValue(val));
    val = "https://www.youtube.com";
    ui->startPage->addItem("www.youtube.com",QVariant::fromValue(val));

   // get current value
    qDebug() << "current value"<< 
       ui->startPage->itemData(ui->startPage->currentIndex()).toString();

1

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

class SmartComboBox : public QComboBox {

    Q_OBJECT

private slots:

    void triggerVariantActivated(int index);

public:

    SmartComboBox(QWidget *parent);

signals:

    void activated(const QVariant &);

};

और कार्यान्वयन

void SmartComboBox::triggerVariantActivated(int index)
{
    activated(itemData(index));
}

SmartComboBox::SmartComboBox(QWidget *parent)
:QComboBox(parent)
{
    connect(this, SIGNAL(activated(int)), this, SLOT(triggerVariantActivated(int)));
}

0

मेरे पास मुद्दा था और

QString str = m_UI->myComboBox->currentText();

इसे हल किया।



0

इसे मैने किया है

QDir path("/home/user/");
QStringList _dirs = path.entryList(QDir::Dirs);
std::cout << "_dirs_count = " << _dirs.count() << std::endl;
ui->cmbbox->addItem(Files);
ui->cmbbox->show();

आप इसके साथ देखेंगे कि _Stirs नाम के QringringList को एक सरणी की तरह संरचित किया गया है, जिसके सदस्य आप _dirs.count द्वारा लौटाए गए मूल्य तक के सूचकांक तक पहुँच सकते हैं ()


0

प्रश्न पुराना है, लेकिन हो सकता है, किसी को वास्तविक उत्तर की आवश्यकता हो।

QGIS 3.4 में आप QComboBoxविधि के साथ मान प्राप्त कर सकते हैं currentData()

उदाहरण: comboBox.currentData()

लिंक: https://doc.qt.io/qt-5/qcombobox.html#currentData-prop


-1

मुझे पता है कि मुझे बहुत देर हो चुकी है लेकिन जिन लोगों को अभी भी यह समस्या है, उन्हें आसानी से हल किया जा सकता है। मैं क्यूटी 5.3 का उपयोग करता हूं और यह ठीक काम करता है। कोई फ़ंक्शन या वह सब बनाने की आवश्यकता नहीं है।

int valueComboBox;
valueComboBox = comboBox->currentIndex();

और यह काम करता है! आशा करता हूँ की ये काम करेगा !


सूचकांक मूल्य के समान नहीं है
व्लादप

-4

मैं यह करने के लिए सबसे आसान तरीका है की पुष्टि:

uiAnalyseAssets::AnalyseAssets(QWidget *parent)
: QWidget(parent)
{
ui.comboBox->addItem("text1");
ui.comboBox->addItem("text2");

...
}

void mainFunction::yourFunction( int index )
{
 int value = ui.comboBox->currentText();
}

7
एक सेकंड रुको - QComboBox::currentText()एक वापस नहीं करता है QString? आप एक समझदार पर कैसे पहुंचे int? और आप अपने पैरामीटर के साथ क्या करना चाहते हैं int index?
क्रिस्चियन सेवेरिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.