Я пытаюсь получить идентификатор записи в модели от QCombobox
с помощью findData (index), но при выборе элемента он возвращает -1. Он работал в другом проекте, но это второй, который не работает. Вот мой код:
modAnfi = new QSqlTableModel(this);
modAnfi->setQuery("SELECT id, (nombres || ' ' || apellidos) as Nombre, nombres, apellidos FROM tbPersonas WHERE activo=1");
comboAnfitrion->setModel(modAnfi);
comboAnfitrion->setModelColumn(1);
comboAnfitrion->setEditable(true);
comboAnfitrion->completer()->setCompletionMode(QCompleter::PopupCompletion);
connect(comboAnfitrion, SIGNAL(currentIndexChanged(int)), this, SLOT(currentIndexChangeAnfitrion(int)));
а также:
void controlReg::currentIndexChangeAnfitrion(int index)
{
qDebug() << comboAnfitrion->findData(index); // -1
qDebug()<< comboAnfitrion->itemData(1); // QVariant(Invalid)
}
Спасибо за ваше время, любая помощь будет оценена.
Вы должны использовать модель, которую вы назначаете для comboBox, используйте индекс для поиска:
modAnfi->data(modAnfi->index( index, 0));
Проверить Документация QComboBox; от findData
описание, цитирование:
Возвращает индекс элемента, содержащего данные
Где вы проходите index
как «данные данные». Тем не менее, индекс уже является индексом в выпадающем списке. Но вы явно не ищете индекс (так как у вас уже есть индекс).
Я подозреваю, что вы действительно хотите позвонить itemData
метод вместо? Это позволит получить данные, связанные с элементом для данного индекса.