2015-07-10 12 views
0

Я пытаюсь обновить QTreeWidget каждые 60 секунд. У меня есть это на QTimer прямо сейчас, но я обеспокоен тем, что при его обновлении он нарушит работу пользователей (например, если у них есть родительский доступ, чтобы вы могли видеть детей, когда я его полностью обновляю). Есть ли модель или что-то, что я могу сделать, чтобы это не мешало их прогрессу?PyQt TreeWidget Smooth update (model-view?)

ответ

1

Невозможно, чтобы представление обновляло и запоминало ранее расширенные элементы. Вы можете кэшировать состояние своего представления и восстановить его с помощью QTreeWidget::expand и QTreeWidget::scrollTo после обновления, но пользователь все равно увидит, как просмотр закрывается и расширяется снова. Кроме того, было бы недостаточно сохранить индекс текущего расширенного элемента, поскольку это может измениться после обновления. Таким образом, вам придется кэшировать уникальный идентификатор и затем искать его в расширенном виджетах.

Что вы пытаетесь сделать, довольно необычно, так как обычно вы обновляете виджет только тогда, когда данные меняются, а не на фиксированный интервал времени.

Рассмотрите возможность использования QTreeView в сочетании с QAbstractListModel вместо QTreeWidget, поскольку последний предназначен для хранения постоянных данных. Затем вы можете испускать dataChanged на модели, которая автоматически обновляет QTreeView.

+0

Спасибо за совет, я думаю, что я попытаюсь реализовать TreeView и обновить его при изменении данных. Я дам вам знать, как это происходит. – sudobangbang