QComboBox - установить выбранный элемент на основе данных элемента
Что было бы лучшим способом выбора элемента в поле со списком QT из предопределенного списка уникальных значений на основе enum
.
В прошлом я привык к стилю выделения в .NET, где элемент можно выбрать, установив для выбранного свойства значение элемента, которое вы хотите выбрать:
cboExample.SelectedValue = 2;
Есть ли возможность сделать это с QT на основе данных элемента, если данные являются перечислением C++?
Ответы
Ответ 1
Вы findData()
значение данных с помощью findData()
а затем используете 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);
}
Ответ 2
Вы также можете посмотреть метод findText (const QString и текст) из QComboBox; он возвращает индекс элемента, который содержит данный текст, (-1, если не найден).
Преимущество использования этого метода в том, что вам не нужно устанавливать второй параметр при добавлении элемента.
Вот небольшой пример:
/* 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 index is ")
.append(QString::number(_comboBox->findText("Text2"))));
/* setup layout */
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(_comboBox);
layout->addWidget(label);
Ответ 3
Если вы знаете текст в поле со списком, которое вы хотите выбрать, просто используйте метод setCurrentText(), чтобы выбрать этот элемент.
ui->comboBox->setCurrentText("choice 2");
Из документации Qt 5.7
Setter setCurrentText() просто вызывает setEditText(), если комбо поле доступно для редактирования. В противном случае, если в списке имеется соответствующий текст, currentIndex установлен в соответствующий индекс.
Итак, пока поле со списком не редактируется, текст, указанный в вызове функции, будет выбран в поле со списком.
Ссылка: http://doc.qt.io/qt-5/qcombobox.html#currentText-prop