如何获取具有两列模型的QComboBox的当前值



我有一个以QSqlQueryModel为模型的QComboBox。该模型是从具有以下特征的数据库构建的 SELECT type_id, type FROM types其中type_id int,类型为varchar

我使用 setModelColumn(1) 函数设置了可见QComboBox列以查看实际类型,而不是索引,但是当选择一个值时,我需要检索type_id,我不知道如何实现。我不能在这里使用 currentIndex() 函数,因为QComboBox的当前索引对我来说毫无用处。

我认为正确的函数是currentData(),但是我搞不通,如何从第一列获取数据...

另一个"解决方案"。我想出了以下解决方法:首先我将可见列设置为 0 ,检索type_id,然后将可见列设置回 1

ui->comboType->setModelColumn(0);
int type_id = ui->comboType->currentText().toInt();
ui->comboType->setModelColumn(1);

我不知道这样做有多正确,但它有效。

编辑:最后,我找到了解决方案。我只需要修改一点king_nak的答案。谢谢king_nak

int row = myComboBox->currentIndex();
QModelIndex idx = myComboBox->model()->index(row, 0); // first column
QVariant data = myComboBox->model()->data(idx);
int type_id = data.toInt();
您可以使用

currentIndex()方法。即使索引对应用程序没有意义,它也是基础模型中的行。您可以使用它从那里查询数据

试试这个:

int row = myComboBox->currentIndex();
QModelIndex idx = myComboBox->rootModelIndex().child(row, 0); // first column
QVariant data = myComboBox->model()->data(idx);
int type_id = data.toInt();

还有另一种很好的方法来获取id,那就是使用 QSqlRecord

如果我们有模型(即 mymodel ( 对于组合框,我们可以获取所选行的QSqlRecord,然后获取该记录所需的字段。

例:

QSqlRecord r = mymodel->record(myComboBox->currentIndex());
int type_id = r.value("type_id").toInt();

相关内容

  • 没有找到相关文章

最新更新