2016-04-26 34 views
0

richte ich ein QComboBox in gui Widget und ich ArtikelZugang ausgewählten Wert von QComboBox

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

hinzufügen und in QComboBox Slot Ich möchte von

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

ausgewählten Wert erhalten, aber Fehler haben: 316: error: no matching function for call to 'QComboBox::itemData(QString)'

Wenn ich currentIndex anstelle von currentText verwende, gebe 0 zurück, wenn es gedruckt wird; addItem erhalten QString

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

und ItemData Arbeit mit Momentan,

Ich benutze InsertItem und es sae Fehler hat, so wie kann Wert oder Text gesetzt und slected Wert bekommen ??

+0

@thuga es falschen Typ ist I edited – g1331

+0

Warum nicht juse Sie 'int index = UI-> Combo-> Momentanindex();'? In dem Code, den Sie gepostet haben, setzen Sie niemals irgendwelche Daten in Ihr Kombinationsfeld, deshalb gibt 'itemData' 0 zurück. Oder wenn Sie den aktuellen Text erhalten wollen, verwenden Sie einfach' QString selected_text = ui-> combo-> currentText() ; '. – thuga

+0

@thuga, wenn ich dieses 'index = ui-> combo-> currentIndex() verwende;' wenn ich das Programm laufe, bekomme ich currentindex ohne select, zum Beispiel wenn ich 1 bis 31 setze wenn ich ohne currentindex wähle 1 – g1331

Antwort

2

Sie können den aktuellen Index wie diese:

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

Oder wenn Sie den Text:

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

Im Code, den Sie geschrieben haben Sie noch nie mit dem Qt::UserRole alle Daten auf Ihre Combobox, deshalb gibt itemData 0 zurück. Wenn Sie itemData verwenden möchten, müssen Sie die Rolle auf Qt::DisplayRole setzen:

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

Aber es gibt keinen Grund, dies zu tun, wenn Sie nette Funktionen haben, die den ausgewählten Index/Text aus der Klasse QComboBox zurückgeben. Hier ist ein funktionierendes Beispiel:

#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, und zum Beispiel, wenn ich 10, Indexausdruck 9 und Textausdruck 10 ?? – g1331

+0

@ g1331 Das wird erwartet. 'currentIndex' gibt den aktuellen Index zurück. Und in der Regel beginnen Indizes von 0. Wenn Sie ein Array oder einen Container haben, ist der erste Eintrag im Index 0. – thuga

+0

Tank Sie es ist sehr hilfreich. – g1331