在PyQT5项目中,我在表“ A”上使用QSqlQueryModel来填充映射到某些LineEdits的同一表上的ListView和QSqlRelationalTableModel。我还有一个过滤器,该过滤器调用QSqlQueryModel :: clear(),QSqlQueryModel :: setQuery(),QSqlRelationalTableModel :: setFilter()和QSqlRelationalTableModel :: select()来根据过滤器更改ListView中的数据。 所有这些代码都在一个通用类中,该类接受一些参数以根据需要模型的表来配置模型。图形部分也包含在类中。因此,层次结构是MainWindow具有TableAWidget,该TableAWidget具有继承GenericModel的TableAModel。
如果我只使用一个表和一个小部件,这将完美地工作。
如果我添加另一个表“ B”(与第一个表相同,只是名称不同)和另一个小部件,该小部件与第一个相同,只是引用新表(因此我们有TableBWidget和TableBModel),则TableBWidget中的过滤器可以按预期工作,但TableAWidget中的过滤器在QSqlQueryModel :: clear()上崩溃。
一些事情要知道:
我真的不知道该怎么办。我不想只使用QSqlRelationalTableModel,因为我不能按需要将它与ListView一起使用,并且TableView看起来很糟糕。.每个建议都值得赞赏。
答案 0 :(得分:0)
问题是缺少“静态”变量。与数据库的连接是一个“实例”变量(以self。开头),因此第二个实例删除了第一个实例已创建的连接,从而导致第一个小部件在尝试连接数据库时崩溃。
现在,我已经将连接处理程序移到了主体类中,并删除了“自我”。一切正常。