Python 在不同的表上使用多个QSqlQueryModel::clear()时崩溃

Python 在不同的表上使用多个QSqlQueryModel::clear()时崩溃,python,pyqt,pyqt5,qsqlquerymodel,Python,Pyqt,Pyqt5,Qsqlquerymodel,在PyQT5项目中,我在表“a”上使用QSqlQueryModel来填充ListView,并在映射到某些LineEdits的同一表上填充QSqlRelationalTableModel。我还有一个过滤器,它调用QSqlQueryModel::clear()、QSqlQueryModel::setQuery()、QSqlRelationalTableModel::setFilter()和QSqlRelationalTableModel::select()来根据过滤器更改ListView中的数据。

在PyQT5项目中,我在表“a”上使用QSqlQueryModel来填充ListView,并在映射到某些LineEdits的同一表上填充QSqlRelationalTableModel。我还有一个过滤器,它调用QSqlQueryModel::clear()、QSqlQueryModel::setQuery()、QSqlRelationalTableModel::setFilter()和QSqlRelationalTableModel::select()来根据过滤器更改ListView中的数据。 所有这些代码都在一个通用类中,该类接受一些参数,以根据我需要的模型表配置模型。图形部分也包含在一个类中。因此层次结构是MainWindow有一个TableAWidget,它有一个继承GenericModel的TableAModel

如果我只使用一个表和一个小部件,那么这个功能将完美无瑕

如果我添加另一个表“B”(与第一个表相同,只是名称不同)和另一个小部件,它是第一个表的相同副本,只引用新表(因此我们有TableBWidget和TableBModel),TableBWidget中的过滤器会按预期工作,但TableAWidget中的过滤器会在QSqlQueryModel::clear()上崩溃

要知道的一些事情:

  • 在小部件中,所有成员都编码为self.\u variablename,因此不应存在“静态”成员
  • 有些变量不遵循self._;样式,但这些变量始终是函数的局部变量
  • 带有过滤器的查询字符串总是ok的,并且总是不同于TableAWidget和TableBWidget,所以我再一次看不到任何“静态”的东西
  • 在主窗口中,TableAWidget显示在TableBWidget之前。如果我切换这两个选项,行为也会切换:TableAWidget的过滤器工作,TableBWidget的过滤器崩溃。所以显示的顺序(也就是日化和声明的顺序)才是重要的
我真的不知道该怎么办。我不想只使用QSqlRelationalTableModel,因为我不能像我想的那样将它与ListView一起使用,而且TableView看起来很糟糕。。每一个建议都值得赞赏。

问题在于缺少一个“静态”变量。到数据库的连接是一个“实例”变量(以self开头),因此第二个实例删除了第一个实例已经创建的连接,导致第一个小部件在尝试连接到数据库时崩溃


现在我已经移动了主类主体中的连接处理程序并删除了“self”。一切都正常。

没有必要,我发现了这个问题,当然这是一个我已经考虑过的非常愚蠢的问题:缺少一个“静态”变量。我与DB的连接是该类的实例成员,而不是全局连接,因此在创建第二个实例时,第一个连接被删除,从而导致第一个小部件崩溃。现在一切都好了!