6

我有一个QTableViewQSqlRelationalTableModel.

有一列引用另一个表,所以当我编辑/创建一行时,该列的编辑器是QCombobox从相关表中获取其数据的。问题是我想在相关表上使用一些预定义的WHERE close 来过滤数据。

例子:

Person:
id, name, job_id;

Job:
id, title, salary

我想要的是类似的东西

model.setRelation(3,QSqlRelation("Job", "id", "title", "WHERE salary > 50000"))

这样 QCombobox 将只有薪水 > 5000 的职位。

我不能按照SO 问题QSqlQueryModel中的建议使用- 我仍然需要用户能够添加新数据或编辑现有数据。

似乎有人在 10 年前通过调整 QT 源代码设法实现了这一点,但是我的 C++ 很糟糕,所以我无法很好地理解它。

可能的解决方案:

  1. 首先想到的是实现我自己的QSqlRelationalDelagate并在. 我会尝试自己做,然后在这里报告结果。但对我来说似乎不是很干净QComboboxcreateEditorsetModelData

  2. 最好的方法是扩展QSqlRelationor的功能,QSqlRelationalTableModel但它的文档似乎不是很清楚。所以真正的问题是对于有经验的 QT/PyQT 开发人员:我如何以这种方式解决问题?


更新

所以过滤掉委托QCombobox中的内容是createEditor可行的,但每次创建编辑器时都需要一个数据库查询,这似乎有点不对劲。而且过滤后处理新索引也很麻烦。但我仍然想知道解决问题的第二种方法。

4

0 回答 0