Frage

Was ist der beste Weg wäre, ein Element in einem QT Kombinationsfeld aus einer vordefinierten Liste von enum anhand eindeutige Werte auszuwählen.

In der Vergangenheit habe ich worden bin daran gewöhnt, .NET Stil der Auswahl, wo das Element durch Einstellen der ausgewählte Eigenschaft auf den Produktwert ausgewählt werden mögen Sie wählen:

cboExample.SelectedValue = 2;

Gibt es trotzdem, diese Basis mit QT zu tun, auf dem Daten des Einzelteils, wenn die Daten eine C ++ Aufzählung ist?

War es hilfreich?

Lösung

Sie Nachschlag den Wert der Daten mit findData() und verwenden Sie dann setCurrentIndex()

QComboBox* combo = new QComboBox;
combo->addItem("100",100.0);    // 2nd parameter can be any Qt type
combo->addItem .....

float value=100.0;
int index = combo->findData(value);
if ( index != -1 ) { // -1 for not found
   combo->setCurrentIndex(index);
}

Andere Tipps

Sie können auch einen Blick auf die Methode findtext haben (const QString & Text) von QComboBox; es gibt den Index des Elements, das den angegebenen Text enthält, (-1, wenn nicht gefunden). Der Vorteil der Verwendung dieser Methode ist, dass Sie nicht den zweiten Parameter einstellen müssen, wenn Sie ein Element hinzufügen.

Hier ist ein kleines Beispiel:

/* Create the comboBox */
QComboBox   *_comboBox = new QComboBox;

/* Create the ComboBox elements list (here we use QString) */
QList<QString> stringsList;
stringsList.append("Text1");
stringsList.append("Text3");
stringsList.append("Text4");
stringsList.append("Text2");
stringsList.append("Text5");

/* Populate the comboBox */
_comboBox->addItems(stringsList);

/* Create the label */
QLabel *label = new QLabel;

/* Search for "Text2" text */
int index = _comboBox->findText("Text2");
if( index == -1 )
    label->setText("Text2 not found !");
else
    label->setText(QString("Text2's index is ")
                   .append(QString::number(_comboBox->findText("Text2"))));

/* setup layout */
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(_comboBox);
layout->addWidget(label);

Wenn Sie den Text in dem Kombinationsfeld wissen, dass Sie auswählen möchten, verwenden Sie einfach die setCurrentText () -Methode das Element auszuwählen.

ui->comboBox->setCurrentText("choice 2");

Von der Qt 5.7 Dokumentation

  

Der Setter setCurrentText () ruft einfach SetEditText (), wenn die Combo   Feld ist editierbar. Andernfalls, wenn es ein passender Text in der Liste enthalten ist,   Momentanindex wird auf den entsprechenden Index.

Also, solange das Kombinationsfeld nicht bearbeitet werden kann, wird der Text im Funktionsaufruf angegeben wird in dem Kombinationsfeld ausgewählt werden.

Referenz: http://doc.qt.io/qt -5 / qcombobox.html # current-prop

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top