كيف يمكنني الحصول على القيمة المحددة من QCombobox؟

StackOverflow https://stackoverflow.com/questions/2056915

  •  20-09-2019
  •  | 
  •  

سؤال

في QT ، يمكنني الحصول على selected text من QComboBox باستخدامcombobox->currentText() طريقة. كيف يمكنني الحصول على selected value?

لقد بحثت عن المساعدة لكنني لم أجد طريقة currentData() الذي كنت أتوقع أن أجده. يمكنني العثور فقط combobox->currentIndex()

هل هناك طريقة أكثر ذكاءً للقيام بذلك بخلاف combobox->itemData(combobox->currentIndex())?

تحديث: لم يعد هذا ضروريًا اعتبارًا من QT 5. أ currentData() تمت إضافة الطريقة http://doc.qt.io/qt-5/qcombobox.html#currentdata-prop

هل كانت مفيدة؟

المحلول

يبدو أنك بحاجة إلى القيام به combobox->itemData(combobox->currentIndex()) إذا كنت ترغب في الحصول على البيانات الحالية لـ QCombobox.

إذا كنت تستخدم الفصل الخاص بك المستمد من QCOMBOBOX ، يمكنك إضافة ملف currentData() وظيفة.

نصائح أخرى

يمكن لهذا الحصول على نص الفهرس الحالي:

QString cb = cbChoice ->currentText();

يمكنك تعيين بيانات 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();
}

بالمناسبة ، أعتقد أنني أسيء فهم سؤالك. أعتقد أن الطريقة التي تحصل بها على البيانات ذكية بما فيه الكفاية؟

تم إضافة وظيفة العضو QCOMBOBOX :: CurrentData منذ طرح هذا السؤال ، انظر هذا ارتكب

كان لدي نفس القضية

لقد حلت بواسطة

value = self.comboBox.currentText()
print value

هذا هو رمز موافق الخاص بي في QT 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();

لقد دهشت أنه لا توجد إشارة نشطة ولدي نفس المشكلة. لقد قمت بحلها عن طريق صنع فئة فرعية من QCombobox. أعتقد أنه من الأفضل تجنب الاضطرار إلى الوصول مباشرة إلى الكائن واستدعاء وظائفه لأن هذا يعني المزيد من الاقتران الضيق ويتعارض مع فلسفة QT. إذن هذا هو الفصل الذي صنعته لي.

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)));
}

كان لدي القضية و

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

حل هذا.

إذا كنت تقوم بتطوير ملحقات QGIS ثم ببساطة

self.dlg.cbo_load_net.currentIndex()

انا فعلت هذا

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();

سترى مع هذا أن قائمة QStringlist المسمى _dirs هي منظمة مثل صفيف يمكن لأعضائهم الوصول عبر فهرس يصل إلى القيمة التي يتم إرجاعها بواسطة _dirs.count ()

أعلم أنني متأخر جدًا ولكن بالنسبة لأولئك الذين لا يزالون لديهم هذه المشكلة ، يمكن حلها بسهولة. يمكنني استخدام QT 5.3 وهو يعمل بشكل جيد. لا حاجة لإنشاء وظيفة أو كل ذلك.

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

ويعمل ! أتمنى أن يساعد!

أؤكد أن أسهل طريقة هي القيام بذلك:

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

...
}

void mainFunction::yourFunction( int index )
{
 int value = ui.comboBox->currentText();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top