我有一个QTableView
由QSqlRelationalTableModel
.
有一列引用另一个表,所以当我编辑/创建一行时,该列的编辑器是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++ 很糟糕,所以我无法很好地理解它。
可能的解决方案:
首先想到的是实现我自己的
QSqlRelationalDelagate
并在. 我会尝试自己做,然后在这里报告结果。但对我来说似乎不是很干净。QCombobox
createEditor
setModelData
最好的方法是扩展
QSqlRelation
or的功能,QSqlRelationalTableModel
但它的文档似乎不是很清楚。所以真正的问题是对于有经验的 QT/PyQT 开发人员:我如何以这种方式解决问题?
更新
所以过滤掉委托QCombobox
中的内容是createEditor
可行的,但每次创建编辑器时都需要一个数据库查询,这似乎有点不对劲。而且过滤后处理新索引也很麻烦。但我仍然想知道解决问题的第二种方法。