QSqlQueryModel返回行数正确但内容为空,重写data()遇递归错误
问题原因分析
1. ListView显示空内容、data()输出None的原因
- 重写
data()方法时,没有正确调用父类的data()方法获取原始数据,或是未针对对应角色返回有效数据。比如你尝试用record(r).value()取数据,但QSqlQueryModel/TableModel的record(row)返回的是临时记录,若未正确绑定索引对应的列或角色,就会返回None;或是你只处理了部分角色,其他场景没有返回父类的结果,导致DisplayRole下无有效数据输出。 - 另一种情况是你在重写
data()时,没先判断index.isValid()就直接取数据,无效索引会直接返回None。 - 注释
data()并设置setModelColumn(1)能正常显示,说明模型本身已正确加载数据,问题完全出在你重写的data()方法逻辑上,没有正确返回对应角色的数据。
2. RecursionError无限递归的原因
- 这是因为你在重写的
data()方法里,错误调用了self.data(index, role)而非父类的super().data(index, role)。每次调用自身的data()都会再次触发方法执行,形成无限递归,直到栈溢出抛出错误。
内容的提问来源于stack exchange,提问作者Iain
相关产品推荐
相关产品推荐

