在PyQT5项目中,我在表"a"上使用QSqlQueryModel来填充映射到某些LineEdits的同一表上的ListView和QSqlRelationalTableModel。我还有一个过滤器,它调用QSqlQueryModel::clear((、QSqlQueryModel::setQuery((、QSqlRelationalTableModel::setFilter((和QSqlRelationalTableModel::select((来根据过滤器更改ListView中的数据。所有这些代码都在一个泛型类中,该类接受一些参数来根据我需要模型的表配置模型。图形部分也包含在一个类中。因此层次结构是MainWindow有一个TableAWidget,它有一个继承GenericModel的TableAModel。
如果我只使用一个表和一个小部件,这将完美地工作。
如果我添加另一个表"B"(与第一个表相同,只是名称不同(和另一个小部件,该小部件是第一个表的相同副本,只引用新表(因此我们有TableBWidget和TableBModel(,则TableBWid奇特中的过滤器按预期工作,但TableAWid奇特中过滤器在QSqlQueryModel::clear((上崩溃。
需要知道的一些事情:
- 在小部件中,所有成员都被编码为self__variablename,因此不应存在"static"成员
- 有些变量跟不上自身。__样式,但这些始终是函数的本地特性
- 带有过滤器的查询字符串总是可以的,并且总是与TableAWidget和TableBWidget不同,所以我再次没有看到任何"静态"的东西
- 在主窗口中,TableAWidget显示在TableBWidget之前。如果我切换两者,行为也会切换:TableAWidget的过滤器工作,TableBWidget的滤波器崩溃。因此,展示的顺序(也是程序化和声明的顺序(才是最重要的
我真的不知道该怎么办。我不想只使用QSqlRelationalTableModel,因为我不能随心所欲地将它与ListView一起使用,而且TableView看起来很糟糕。。我们对每一个建议都表示赞赏。
问题是缺少"静态"变量。与数据库的连接是一个"实例"变量(以self.开头(,因此第二个实例丢弃了第一个已经创建的连接,导致第一个小部件在尝试连接到数据库时崩溃。
现在,我已经移动了主体类中的连接处理程序,并删除了"self"一切都很好。