В проекте PyQT5 я использую QSqlQueryModel в таблице 'A', чтобы заполнить ListView и QSqlRelationalTableModel в той же таблице, сопоставленной с некоторыми LineEdits. У меня также есть фильтр, который вызывает QSqlQueryModel :: clear (), QSqlQueryModel :: setQuery (), QSqlRelationalTableModel :: setFilter () и QSqlRelationalTableModel :: select () для изменения данных в ListView в соответствии с фильтром.
Весь этот код находится в общем классе, который принимает некоторые параметры для настройки моделей в соответствии с таблицей, для которой мне нужна модель. Графическая часть также включена в класс. Таким образом, иерархия MainWindow имеет TableAWidget, который имеет TableAModel, который наследует GenericModel.
Это работает безупречно, если я использую только одну таблицу и один виджет.
Если я добавлю еще одну таблицу 'B' (идентичную первой, только другое имя) и другой виджет, который является идентичной копией первой, только ссылающейся на новую таблицу (поэтому у нас есть TableBWidget и TableBModel), фильтр в TableBWidget работает как положено, но фильтр в TableAWidget падает на QSqlQueryModel :: clear ().
Что нужно знать:
- в виджетах ВСЕ члены кодируются как self .__ variablename, поэтому не должно быть «статических» членов.
- есть некоторые переменные, которые не соответствуют стилю self .__, но они всегда локальны для функций.
- строка запроса с фильтром всегда в порядке и всегда отличается от TableAWidget и TableBWidget, поэтому, опять же, я не вижу никаких «статических» вещей, происходящих вокруг.
- в главном окне TableAWidget показывается перед TableBWidget. Если я переключаю эти два, поведение также переключается: фильтр TableAWidget работает и фильтр TableBWidget аварийно завершает работу. Таким образом, порядок отображения (который также является порядком инициализации и объявления) имеет значение.
Я действительно не знаю, что делать. Я не хотел бы использовать только QSqlRelationalTableModel, потому что я не могу использовать его с ListView, как я хочу, и TableView выглядит ужасно. Каждое предложение приветствуется.