Я попытался создать пользовательский интерфейс, который отображает содержимое таблицы, в то время как данные обновляются каждую секунду.
Поэтому у меня есть цепочка моделей:
QSqlTableModel
— для доступа к содержанию таблицQIdentityProxyModel
немного изменить данные (источник — TableModel)Эта цепочка заканчивается QTableView
, Поскольку QSqlTableModel
обновляется каждую секунду,
любой выбор в TableView также удаляется каждую секунду. Теперь у меня было две идеи, чтобы это исправить.
QIdentityProxyModel
не пересылает сигналы, такие как modelAboutToBeReset или modelReset или dataChanged .. также невозможно пересылать эти сигналы из MyModel, потому что они являются частными.Я искал другие способы противостоять этим проблемам обновления без успеха. Но я не могу представить, что я первый, кто использует цепочку прокси-моделей в сочетании с периодическим обновлением и выбором моделей.
Кто-нибудь может дать мне несколько советов?
Заранее спасибо.
Возможно стоит отметить:
QSqlTableModel
используется для многих TableViews. (С другой цепочкой FilterProxyModel.) Поэтому я не могу просто перестать обновлять, потому что у одного View есть выбор.Надеюсь, мой вопрос имеет смысл.
QAbstractItemModel
включает в себя ряд сигналов, которые могут помочь вам узнать, когда данные в модели изменяются или будут изменяться. В частности, он имеет следующие сигналы:
Учитывая, что вы потеряете выделение, я предполагаю, что выделенные жирным шрифтом сигналы — это те, которые вам нужны, потому что поведение Qt по умолчанию — сохранять выделение, если они могут, когда столбцы или строки удаляются / вставляются, и это не влияет выбор.
Как только вы подключитесь к этим сигналам, в modelAboutToBeReset
Я предлагаю получить идентификаторы для ячеек, которые вы можете использовать повторно, чтобы выбрать их снова, и в modelReset
затем, используя эти идентификаторы, чтобы получить QModelIndex
и используя их, чтобы снова выбрать те же ячейки.
Других решений пока нет …