Я работаю над визуализационным SW, который использует QGraphicsView и QGraphicsScene (Qt4.8, PyQt). Мне нужно LOD (уровень детализации) обработки в зависимости от уровня масштабирования. Для этого я создаю больше QGraphicsScenes, и я представляю всю сцену каждому с различным уровнем LOD. (Для каждого уровня LOD существует QGraphicsScene). Я переключаюсь между этими QGraphicsScenes в зависимости от уровня масштабирования. (QGraphicsView.setScene()). Большая проблема в том, что ScrollBars QGraphicsView сбрасывает свои позиции при вызове setScene().QGraphicsView уровень обработки деталей
Вот фрагмент кода, который пытается восстановить значения ScrollBars, но он не работает:
hsb = self.horizontalScrollBar()
vsb = self.verticalScrollBar()
hv, vv = hsb.value(), vsb.value()
self.lod = i
self.setScene(self.scenes[self.lod])
hsb.setValue(hv) # this simply doesn't work !!!!
vsb.setValue(vv)
Любая идея, чтобы сохранить позиции на прокручивание? Или любая идея для эффективной обработки LOD? Я мог бы попытаться связать значение ScrollBar с измененными сигналами в некоторые пользовательские слоты, которые отключили бы от его собственного сигнала, чем повторно установили значение ScrollBar из сохраненного. Это было бы очень хромым и уродливым решением.
Здравствуйте! Я также читал об этом решении. Но когда у вас есть около 100100 графических элементов, и вы хотите отображать только 100, это довольно неэффективно, чтобы принять решение для каждых 100000 графических элементов, которые не будут отображаться. Разве нет лучшего решения? – Endre
Возможно, вы можете сгруппировать элементы? Или создать своего рода иерархию? Вы можете отображать/скрывать группу элементов при изменении уровня данных (вы можете проверить уровень даты, когда изменения сцены (или представления) меняются). – Fabio
Группировка кажется хорошей идеей. Я буду искать это. Благодаря! – Endre