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

2024-10-04 05:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

如果我只使用一个表和一个小部件,那么它的工作是完美的。你知道吗

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

要知道的一些事情:

  • 在小部件中,所有成员都被编码为self.\u variablename,因此不应该有“静态”成员。你知道吗
  • 有些变量不遵循self.\样式,但它们总是函数的局部变量。你知道吗
  • 带有过滤器的查询字符串总是可以的,并且总是不同于TableAWidget和TableBWidget,所以我再一次看不到任何“静态”的东西。你知道吗
  • 在主窗口中,TableWidget显示在TableWidget之前。如果我将两者切换,行为也会切换:TableAWidget的过滤器工作,TableBWidget的过滤器崩溃。所以展示的顺序(也就是日常化和声明的顺序)才是最重要的。你知道吗

我真的不知道该怎么办。我不想只使用QSqlRelationalTableModel,因为我不能像我想的那样与ListView一起使用,而且TableView看起来很糟糕。。感谢您的建议。你知道吗


Tags: 模型self过滤器顺序部件静态成员pyqt5
1条回答
网友
1楼 · 发布于 2024-10-04 05:22:01

问题是缺少一个“静态”变量。到数据库的连接是一个“instance”变量(前面加了self),所以第二个实例删除了第一个已经创建的连接,导致第一个小部件在尝试连接到数据库时崩溃。你知道吗

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

相关问题 更多 >