首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QSqlRelationalTableModel中获得具有关系集的列的索引值?

如何在QSqlRelationalTableModel中获得具有关系集的列的索引值?
EN

Stack Overflow用户
提问于 2015-10-16 18:06:50
回答 2查看 802关注 0票数 0

QsqlRelationalTableModel中,如果设置了包含外键的列的关系,则外键被解析为人可读的字符串。在我的应用程序中,站点被解析为站名。

出于某些目的,我也需要这个文具。QsqlRelationalTableModel.data()QsqlRelationalTableModel.itemData()只返回displayValue (用于显示角色以及编辑角色)。如何获得相应的外键(indexValue)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-16 18:06:50

QsqlRelationalTableModel.relationModel()返回一个QSqlTableModel对象,用于访问列为外键的表。

http://doc.qt.io/qt-5/qsqlrelationaltablemodel.html#relationModel

通过setFilter()方法relationModel()可以找到相应的id (indexValue),如果displayValue是唯一的:

代码语言:javascript
复制
rm = self.relationModel(<index column>)
f = '<columnname> = "{}"'.format(<displayvalue>)
rm.setFilter(f)
id = rm.data(rm.index(0,0))
票数 0
EN

Stack Overflow用户

发布于 2022-05-22 17:24:58

我的意思是,您可以像这样更改qsqlrelationaltablemodel.cpp文件:

代码语言:javascript
复制
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/

不幸的是只有俄国人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33176890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档