如何使用具有两列的模型获取 QComboBox 的当前值?
How to get the current value of a QComboBox with a model with two columns?
我有一个 QComboBox
,模型是 QSqlQueryModel
。该模型是从一个数据库构建的
SELECT type_id, type FROM types
其中 type_id
是 int
并且类型是 varchar
.
I set the QComboBox
visible column with the setModelColumn(1)
function, to see the actual types, instead of the indexes, but when a value is selected, I need to retrieve the type_id
而且我不知道如何实现。我不能在这里使用 currentIndex()
函数,因为 QComboBox
的当前索引对我来说没用。
我认为正确的函数是 currentData()
,但我想不通,如何从第一列获取数据...
您可以使用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();
另一个"solution"。我想出了以下解决方法:首先我将可见列设置为 0
,检索 type_id
,然后将可见列设置回 1
。
ui->comboType->setModelColumn(0);
int type_id = ui->comboType->currentText().toInt();
ui->comboType->setModelColumn(1);
我不知道这样做有多正确,但它确实有效。
编辑:
最后,我找到了解决方案。我只需要修改一点 king_nak-s 答案。谢谢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();
还有另一种获取 id
的好方法,那就是使用 QSqlRecord
.
如果我们有组合框的模型(即 mymodel
),我们可以获得所选行的 QSqlRecord
,然后是该记录所需的字段。
示例:
QSqlRecord r = mymodel->record(myComboBox->currentIndex());
int type_id = r.value("type_id").toInt();
我有一个 QComboBox
,模型是 QSqlQueryModel
。该模型是从一个数据库构建的
SELECT type_id, type FROM types
其中 type_id
是 int
并且类型是 varchar
.
I set the QComboBox
visible column with the setModelColumn(1)
function, to see the actual types, instead of the indexes, but when a value is selected, I need to retrieve the type_id
而且我不知道如何实现。我不能在这里使用 currentIndex()
函数,因为 QComboBox
的当前索引对我来说没用。
我认为正确的函数是 currentData()
,但我想不通,如何从第一列获取数据...
您可以使用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();
另一个"solution"。我想出了以下解决方法:首先我将可见列设置为 0
,检索 type_id
,然后将可见列设置回 1
。
ui->comboType->setModelColumn(0);
int type_id = ui->comboType->currentText().toInt();
ui->comboType->setModelColumn(1);
我不知道这样做有多正确,但它确实有效。
编辑: 最后,我找到了解决方案。我只需要修改一点 king_nak-s 答案。谢谢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();
还有另一种获取 id
的好方法,那就是使用 QSqlRecord
.
如果我们有组合框的模型(即 mymodel
),我们可以获得所选行的 QSqlRecord
,然后是该记录所需的字段。
示例:
QSqlRecord r = mymodel->record(myComboBox->currentIndex());
int type_id = r.value("type_id").toInt();