如何获取在 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 上测试过了