Список видимых предметов из QTreeView

Каков наилучший способ получить список отображаемых в данный момент элементов, отображаемых QTreeView? И можно ли получать уведомления при его изменении?

Данные для моей модели могут изменяться асинхронно приложения (данные поступают из аппаратных регистров). Обновление этих данных может быть медленным, поэтому я хочу периодически обновлять в выделенном потоке. Я не хочу обновлять все элементы, так как это будет очень неэффективно, только видимые.

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

1

Решение

Возможно, будет проще просто игнорировать вид и сосредоточиться на модели.

Вы можете смоделировать его в простом кэше с опережением обновления: .data () возвращает последнее известное значение, но также планирует обновление. Так как вид позову model.data(index)

  • когда индекс появляется в поле зрения,
  • каждый раз, когда это меняется (с dataChanged() сигнал) пока индекс виден

Это может сформировать цикл для опроса видимых элементов. И представление перестанет вызывать .data (), когда ячейка не будет видна, завершив цикл.
Вы также должны принять во внимание, что data() можно вызвать вне этого цикла, так что ничего не ломается.

Возможная последовательность

UI

  1. Клетка появляется в поле зрения
  2. Просмотр звонков model.data(cell, Qt::DisplayRole):
    • добавить ячейку в набор запланированных индексов (если еще не запланирован)
    • вернуть старые или данные по умолчанию
  3. Данные обновляются асинхронно, излучать dataChanged()
  4. Любая ячейка находится в представлении, и представление вызовет model.data() снова — возвратитесь к шагу 2, или ячейка не видна, и последовательность заканчивается здесь.

Поток данных

  1. Каждые X мс обновляют все запланированные индексы (очищая набор).

Это выполнит ваше требование непрерывного / асинхронного опроса видимых элементов модели.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]