QCombobox에서 선택한 값을 어떻게 얻을 수 있습니까?


87

Qt에서는 방법 을 사용하여 selected texta QComboBox를 얻을 수 있습니다 combobox->currentText(). 어떻게 얻을 수 selected value있습니까?

나는 도움을 찾았지만 내가 찾길 currentData()기대했던 방법 을 찾을 수 없었다 . 나는 단지 찾을 수 있었다combobox->currentIndex()

다른 방법으로 더 똑똑한 방법이 combobox->itemData(combobox->currentIndex())있습니까?

업데이트 : Qt 5부터는 더 이상 필요하지 않습니다. http://doc.qt.io/qt-5/qcombobox.html#currentData-propcurrentData() 메소드가 추가되었습니다.

답변:


87

combobox->itemData(combobox->currentIndex())QComboBox의 현재 데이터를 얻으려면 해야 할 것 같습니다 .

QComboBox에서 파생 된 고유 한 클래스를 사용하는 경우 currentData()함수를 추가 할 수 있습니다 .


2
감사. 이 팁을 프로그램에서 사용했습니다.
Brian Stinar 2010 년

1
@Patrice Bernassola 그러나 'QVariant'유형의 스위치 작동 combobox->itemData(combobox->currentIndex())은 불법입니다 !!! 왜 ?
The Beast

아무것도 선택하지 않으면 작동하지 않습니다 currentIndex = -1. 마지막 인덱스에서 데이터를 반환하거나 QComboBox가 비어 있으면 오류가 발생합니다.
johnson

24

이것은 현재 색인의 텍스트를 가져올 수 있습니다.

QString cb = cbChoice ->currentText();

3
이것이 어떻게 도움이됩니까? currentText영업 이익은 ... 이미 알고있는 것입니다
아콩 카과

23

모든 항목에 대해 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();
}

그건 그렇고, 나는 당신의 질문을 오해 한 것 같습니다. 나는 당신이 데이터를 얻는 방법이 충분히 똑똑하다고 생각합니까?



7

나는 같은 문제가 있었다

나는 해결했다

value = self.comboBox.currentText()
print value

2
그것은 값이 아니라 레이블 텍스트입니다.
mmitchell

3

이것은 QT 4.7의 내 OK 코드입니다.

 //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의 하위 클래스를 만들어 해결했습니다. 객체에 직접 액세스하고 함수를 호출하는 것을 피하는 것이 더 낫다고 생각합니다. 이는 더 긴밀한 결합을 의미하고 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)));
}


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

이를 통해 _dirs라는 QStringList가 인덱스를 통해 _dirs.count ()가 반환 한 값까지 액세스 할 수있는 멤버의 배열처럼 구조화되어 있음을 알 수 있습니다.


-1

나는 문제가 있었고

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

이 문제를 해결했습니다.


다른 사람이 위에 쓴 다시, 이것은 선택된 텍스트 , NOT 선택 VALUE . 다른 것.
Oak_3260548

-1

QGIS 플러그인을 개발하고 있다면 간단히

self.dlg.cbo_load_net.currentIndex()

아니요, 이것은 선택VALUE 되지 않았습니다 . 선택됨 TEXT, 선택됨 VALUE및 선택됨 INDEX은 완전히 다른 것입니다. 단지 우연 수 index와 동일 할 value. 사람들이 콤보를 사용하려면 그 차이를 배우고 이해해야합니다. 그리고 내가 가장 잘 이해하기로 Qt에서 데이터 모델을 사용할 때 VALUE가 약간 확장됩니다.
Oak_3260548

-2

내가 늦었다는 것을 알고 있지만 여전히 그 문제가있는 사람들에게는 쉽게 해결할 수 있습니다. Qt 5.3을 사용하는데 잘 작동합니다. 함수 또는 모든 것을 만들 필요가 없습니다.

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

그리고 그것은 작동합니다! 도움이 되길 바랍니다!


인덱스 값과 동일하지 않다
Vladp

-5

가장 쉬운 방법은 이렇게하는 것입니다.

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무엇을 하시겠습니까?
Christian Severin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.