Каков наилучший способ получить список отображаемых в данный момент элементов, отображаемых QTreeView? И можно ли получать уведомления при его изменении?
Данные для моей модели могут изменяться асинхронно приложения (данные поступают из аппаратных регистров). Обновление этих данных может быть медленным, поэтому я хочу периодически обновлять в выделенном потоке. Я не хочу обновлять все элементы, так как это будет очень неэффективно, только видимые.
Я в курсе этот, но в моем случае данные изменяются асинхронно, поэтому я не могу обновить элементы только при вызове setData ().
Возможно, будет проще просто игнорировать вид и сосредоточиться на модели.
Вы можете смоделировать его в простом кэше с опережением обновления: .data () возвращает последнее известное значение, но также планирует обновление. Так как вид позову model.data(index)
dataChanged()
сигнал) пока индекс виденЭто может сформировать цикл для опроса видимых элементов. И представление перестанет вызывать .data (), когда ячейка не будет видна, завершив цикл.
Вы также должны принять во внимание, что data()
можно вызвать вне этого цикла, так что ничего не ломается.
model.data(cell, Qt::DisplayRole)
:
dataChanged()
model.data()
снова — возвратитесь к шагу 2, или ячейка не видна, и последовательность заканчивается здесь.Это выполнит ваше требование непрерывного / асинхронного опроса видимых элементов модели.
Других решений пока нет …