QCombobox'tan seçilen DEĞERİ nasıl alabilirim?


87

Qt'de, yöntemi kullanarak a'nın selected textdeğerini alabilirim . Nasıl alabilirim ?QComboBoxcombobox->currentText()selected value

Yardım aradım ama bulmayı currentData()beklediğim bir yöntem bulamadım. Sadece bulabildimcombobox->currentIndex()

Bunu yapmanın dışında daha akıllıca bir yolu var mı combobox->itemData(combobox->currentIndex())?

Güncelleme: Bu, Qt 5'te artık gerekli değildir. Bir currentData()yöntem eklendi http://doc.qt.io/qt-5/qcombobox.html#currentData-prop

Yanıtlar:


87

combobox->itemData(combobox->currentIndex())QComboBox'ın mevcut verilerini almak istiyorsanız yapmanız gereken görünüyor .

QComboBox'tan türetilen kendi sınıfınızı kullanıyorsanız, bir currentData()işlev ekleyebilirsiniz .


2
Teşekkürler. Bu ipucunu programımda kullandım.
Brian Stinar

1
@Patrice Bernassola Ancak 'QVariant' türündeki anahtarlama işlemi: combobox->itemData(combobox->currentIndex())yasadışı !!! Neden ?
Canavar

Yani hiçbir şey seçilmezse bu çalışmaz currentIndex = -1. Ya son dizindeki verileri döndürür ya da QComboBox boşsa bir hata verir.
johnson

24

Bu, mevcut dizinin metnini alabilir:

QString cb = cbChoice ->currentText();

3
Bu nasıl yardımcı olur? currentTextOP'nin zaten farkında olduğu şey ...
Aconcagua

23

tüm öğeler için QVariant verilerini ayarlayabilir, ardından değeri ihtiyacınız olduğunda alabilirsiniz.

bu durum için örnek bir kod var:

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

bu arada, sanırım sorunuzu yanlış anladım. Verileri elde etme şeklinizin yeterince akıllı olduğunu düşünüyorum?




3

Bu, QT 4.7'deki OK kodum:

 //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

Aktif bir sinyal olmadığı ve aynı problemi yaşadığı için şaşırdım. QComboBox'ın bir alt sınıfını oluşturarak çözdüm. Nesneye doğrudan erişmek ve işlevlerini çağırmaktan kaçınmanın daha iyi olacağını düşünüyorum çünkü bu daha sıkı bağlantı anlamına geliyor ve Qt'nin felsefesine aykırı. İşte benim için işe yarayan yaptığım ders.

class SmartComboBox : public QComboBox {

    Q_OBJECT

private slots:

    void triggerVariantActivated(int index);

public:

    SmartComboBox(QWidget *parent);

signals:

    void activated(const QVariant &);

};

Ve uygulama

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

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


0

bunu ben yaptım

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

Bununla, _dirs adlı QStringList'in, üyeleri _dirs.count () tarafından döndürülen değere kadar bir dizin aracılığıyla erişebileceğiniz bir dizi gibi yapılandırıldığını göreceksiniz.


-1

Sorun bende vardı ve

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

bunu çözdü.


Diğerleri yukarıda yazdığı gibi, yine, bu edilmektedir seçili metin DEĞİL seçilen DEĞER . Farklı bir şey.
Oak_3260548

-1

QGIS eklentileri geliştiriyorsanız,

self.dlg.cbo_load_net.currentIndex()

Hayır, bu da seçilmediVALUE . Seçilmiş TEXT, seçilmiş VALUEve seçilmiş INDEXtamamen farklı şeylerdir. Sadece tesadüfen indexeşit olabilir value. İnsanlar combo kullanmak istiyorlarsa, farkı öğrenmeleri ve anlamaları gerekir. Ve en iyi anlayışıma göre, Qt'de DEĞER, veri modellerini kullanırken biraz genişletilmiştir.
Oak_3260548

-2

Çok geç kaldığımı biliyorum ama hala bu sorunu yaşayanlar için kolaylıkla çözülebilir. Qt 5.3 kullanıyorum ve iyi çalışıyor. Bir işlev veya hepsini oluşturmanıza gerek yok.

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

ve çalışıyor ! Umarım yardımcı olur !


endeks değer ile aynı değil
Vladp

-5

En kolay yolun bunu yapmak olduğunu onaylıyorum:

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
Bir saniye - QComboBox::currentText()bir dönmüyor QStringmu? Mantıklı olana nasıl ulaşırsınız int? Ve parametrenizle ne yapmak istiyorsunuz int index?
Christian Severin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.