2016-04-26 3 views
0

Я установил QComboBox в виджете, и я добавить элементдоступа выбранное значение QComboBox

for(int i = 1; i < 31; i++) 
     { 
      ui->combo->addItem(QString::number(i)); 
     } 

и в слоте QComboBox Я хочу, чтобы получить выбранное значение

int index =ui->combo->itemData(ui->combo->currentText()); 

но есть ошибка: 316: error: no matching function for call to 'QComboBox::itemData(QString)'

если я использую currentIndex вместо currentText возвращение 0 при печати; AddItem получить QString,

void QComboBox::addItem(const QString & text, const QVariant & userData = QVariant()) 

и ItemData работа с currentIndex,

Я использую InsertItem и имеет ошибку САЕ, так как можно установить значение или текст и получить slected значение ??

+0

@thuga это неправильный тип редактировал – g1331

+0

Почему вы не JUSE использовать 'индекс Int = ui-> combo-> currentIndex();'? В коде, который вы отправили, вы никогда не устанавливаете какие-либо данные в свой поле со списком, поэтому 'itemData' возвращает 0. Или если вы хотите, чтобы текущий текст просто использовал' QString selected_text = ui-> combo-> currentText() ; '. – thuga

+0

@thuga, если я использую этот 'index = ui-> combo-> currentIndex();' когда я запускаю программу get currentindex без выбора, например, если я установил от 1 до 31 при запуске без select currentindex, будет 1 – g1331

ответ

2

Вы можете получить текущий индекс, как это:

int index = ui->combo->currentIndex(); 

Или, если вы хотите, чтобы текст:

QString text = ui->combo->currentText(); 

В коде вы публикуемые вы никогда не устанавливать какие-либо данные с Qt::UserRole в ваш combobox, поэтому itemData возвращает 0. Если вы хотите использовать itemData, вы должны установить роль Qt::DisplayRole:

ui->combo->itemData(index, Qt::DisplayRole) 

Но нет причин для этого, когда у вас есть приятные функции, которые возвращают выбранный индекс/текст, предоставленный классом QComboBox. Вот рабочий пример:

#ifndef MYWIDGET_H 
#define MYWIDGET_H 

#include <QWidget> 
#include <QLayout> 
#include <QComboBox> 
#include <QDebug> 

class MyWidget : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit MyWidget(QWidget *parent = 0) : QWidget(parent) 
    { 
     setLayout(new QVBoxLayout); 
     comboBox = new QComboBox; 
     for(int i = 1; i < 31; i++) 
      comboBox->addItem(QString::number(i)); 
     connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(cbIndexChanged()));  
     layout()->addWidget(comboBox); 
    } 

public slots: 
    void cbIndexChanged() 
    { 
     int index = comboBox->currentIndex(); 
     QString text = comboBox->currentText(); 

     qDebug() << index << text << comboBox->itemData(index, Qt::DisplayRole); 
    } 

private: 
    QComboBox *comboBox; 
}; 

#endif // MYWIDGET_H 
+0

tnx, и, например, когда я выбираю 10, индексную распечатку 9 и распечатку текста 10 ?? – g1331

+0

@ g1331 Это ожидается. 'currentIndex' возвращает текущий индекс. И обычно индексы начинаются с 0. Если у вас есть массив или контейнер, первый элемент находится в индексе 0. – thuga

+0

танк вы очень полезны. – g1331

Смежные вопросы