如何获取在 QSqlRelationalTableModel 中设置了关系的列的索引值?
How to get the indexvalue of a column with a relation set in QSqlRelationalTableModel?
在 QsqlRelationalTableModel
中,如果设置了包含外键的列的关系,外键将解析为人类可读的字符串。在我的应用程序中,stationids 被解析为 stationnames。
出于某些目的,我也需要 stationid。 QsqlRelationalTableModel.data()
或 QsqlRelationalTableModel.itemData()
仅 return 显示值(对于显示角色和编辑角色)。如何获取对应的外键(indexValue)?
QsqlRelationalTableModel.relationModel() returns a QSqlTableModel object for accessing the table for which column is a foreign key.
http://doc.qt.io/qt-5/qsqlrelationaltablemodel.html#relationModel
通过relationModel()
的setFilter()
方法可以找到对应的id(indexValue),如果displayValue唯一:
rm = self.relationModel(<index column>)
f = '<columnname> = "{}"'.format(<displayvalue>)
rm.setFilter(f)
id = rm.data(rm.index(0,0))
我的意思是您可以像这样更改 qsqlrelationaltablemodel.cpp 文件:
QString QSqlRelationalTableModel::selectStatement() const
......
//!!! my
fList.append(QLatin1String(", "));
fList.append(relTableAlias);
fList.append(QLatin1String("."));
fList.append(relation.indexColumn());
fList.append(QLatin1String(" as "));
fList.append(relation.tableName());
fList.append(QLatin1String("_"));
fList.append(relation.indexColumn());
我已经在 Qt 4.8.1 上测试过了
在 QsqlRelationalTableModel
中,如果设置了包含外键的列的关系,外键将解析为人类可读的字符串。在我的应用程序中,stationids 被解析为 stationnames。
出于某些目的,我也需要 stationid。 QsqlRelationalTableModel.data()
或 QsqlRelationalTableModel.itemData()
仅 return 显示值(对于显示角色和编辑角色)。如何获取对应的外键(indexValue)?
QsqlRelationalTableModel.relationModel() returns a QSqlTableModel object for accessing the table for which column is a foreign key.
http://doc.qt.io/qt-5/qsqlrelationaltablemodel.html#relationModel
通过relationModel()
的setFilter()
方法可以找到对应的id(indexValue),如果displayValue唯一:
rm = self.relationModel(<index column>)
f = '<columnname> = "{}"'.format(<displayvalue>)
rm.setFilter(f)
id = rm.data(rm.index(0,0))
我的意思是您可以像这样更改 qsqlrelationaltablemodel.cpp 文件:
QString QSqlRelationalTableModel::selectStatement() const
......
//!!! my
fList.append(QLatin1String(", "));
fList.append(relTableAlias);
fList.append(QLatin1String("."));
fList.append(relation.indexColumn());
fList.append(QLatin1String(" as "));
fList.append(relation.tableName());
fList.append(QLatin1String("_"));
fList.append(relation.indexColumn());
我已经在 Qt 4.8.1 上测试过了