Я создал предварительный просмотр, который показывает визуализированное изображение. Я использовал пример средства просмотра изображений для масштабирования. поэтому у меня есть класс, наследующий QScrollArea
, способный отображать изображение в QLabel
и увеличивать/уменьшать/соответствовать определенным ограничениям. Я показывал полосы прокрутки «по мере необходимости».
В качестве нового требования я должен иметь возможность выполнять панорамирование и не показывать полосы прокрутки.
Я искал способы сделать это и нашел примеры людей, использующих события нажатия, перемещения и отпускания мыши, чтобы связать точку на изображении с полосами прокрутки.
Проблемы:
1) направление движения, если полосы прокрутки невидимы, является неожиданным - при панорамировании объект перемещается в направлении мыши (остается под мышью), в то время как полосы прокрутки перемещаются в противоположном направлении
2) Я думаю, что движение ограничено размером полосы прокрутки, поэтому... если я вычислю обратный ход, я ударюсь о стену, пока все еще есть место для перемещения в одном направлении
3) Это не будет работать с масштабированием, а именно тогда, когда необходимо панорамирование; потребуются более сложные расчеты.
Я мог бы попеременно использовать QGraphicsView
и
setDragMode(ScrollHandDrag);
Это также хорошо работало бы с масштабированием, и мне не пришлось бы реализовывать это самостоятельно.
Причина, по которой я еще не сделал этого, заключается в том, что мне нужно было бы добавить QGraphicsScene
и QGraphicsPixmapItem
, содержащие изображение, которое я хочу - затем найдите, как отключить все события мыши, кроме панорамирования - и по-прежнему используйте QScrollArea
для удержания QGraphicsView
;
Кажется, это слишком много накладных расходов (и это должно быть чрезвычайно легким для встроенного устройства с мало скорости и памяти).
Какой лучший вариант? есть ли способ панорамировать увеличенное изображение в средстве просмотра, как можно более легкое?