在QsqlRelationalTableModel中,如果设置了包含外键的列的关系,则外键被解析为人可读的字符串。在我的应用程序中,站点被解析为站名。
出于某些目的,我也需要这个文具。QsqlRelationalTableModel.data()或QsqlRelationalTableModel.itemData()只返回displayValue (用于显示角色以及编辑角色)。如何获得相应的外键(indexValue)?
发布于 2015-10-16 18:06:50
QsqlRelationalTableModel.relationModel()返回一个QSqlTableModel对象,用于访问列为外键的表。
http://doc.qt.io/qt-5/qsqlrelationaltablemodel.html#relationModel
通过setFilter()方法relationModel()可以找到相应的id (indexValue),如果displayValue是唯一的:
rm = self.relationModel(<index column>)
f = '<columnname> = "{}"'.format(<displayvalue>)
rm.setFilter(f)
id = rm.data(rm.index(0,0))发布于 2022-05-22 17:24:58
我的意思是,您可以像这样更改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上测试过。
第二个变体要想得到正确的结果,就是创建自己的类,由QSqlTableModel继承,根据您的需要制作。
首先,您必须重新实现selectStatement函数并创建您自己的行为器。
下面是QSqlRelationalTableModelMod1类的beta版本,例如:https://kkmspb.ru/development/Qt/database-sql/Extended-Qt/QSqlRelationalTabelModelMod1/
不幸的是只有俄国人。
https://stackoverflow.com/questions/33176890
复制相似问题