Название: подскажите как... Отправлено: KontAr от Декабрь 15, 2011, 15:53 ... реализовать перемещение view над сценой при помощи нажатой правой кнопкой мыши? Функция должна работать только тогда, когда размер сцены больше вью.
Название: Re: подскажите как... Отправлено: _OLEGator_ от Декабрь 15, 2011, 16:13 Код
Название: Re: подскажите как... Отправлено: KontAr от Декабрь 15, 2011, 18:58 не тащит. даже в ассистенте ничего понять не могу (пример с мышами). Можно еще одну подсказку?
Название: Re: подскажите как... Отправлено: _OLEGator_ от Декабрь 15, 2011, 19:58 Подсказка №2
Код %QTDIR%\examples\graphicsview\collidingmice Название: Re: подскажите как... Отправлено: popper от Декабрь 15, 2011, 20:14 уточни задачу. наверное, нужно перетаскивать видимую область сцены вслед за движением мыши при нажатой правой кнопке, типа как в Adobe Reader с левой кнопкой?
Название: Re: подскажите как... Отправлено: KontAr от Декабрь 15, 2011, 20:19 подсказка №2 не сработало, я так и делал.
да, именно как в ридере Название: Re: подскажите как... Отправлено: KontAr от Декабрь 15, 2011, 20:24 во вью в mousePressEvente я указал setDragMode(QGraphicsView::ScrollHandDrag), а в mouseReleaseEvent вернул как было. что еще нужно сделать?
Название: Re: подскажите как... Отправлено: _OLEGator_ от Декабрь 15, 2011, 21:44 Да, извиняюсь, не досмотрел, что правая кнопка нужна.
Видимо придется реализовывать самому, раз такой функционал нужен. Название: Re: подскажите как... Отправлено: KontAr от Декабрь 16, 2011, 14:57 ну нато так нато. за какой параметр вью цепляться? так вроде нет типа viewRect(QrectF *)
Название: Re: подскажите как... Отправлено: _OLEGator_ от Декабрь 16, 2011, 15:07 Можно использовать
Код
Название: Re: подскажите как... Отправлено: popper от Декабрь 16, 2011, 21:12 Сейчас не могу посмотреть, как я делал перетаскивание, но точно использовал в переопределенном методе QGraphicsView::mouseMoveEvent функцию
Код: void QGraphicsView::centerOn ( const QPointF & pos ) Название: Re: подскажите как... Отправлено: KontAr от Декабрь 17, 2011, 08:57 нужно же сначала узнать, какие координаты сцены отображаются? или узнавать центр вью?
Название: Re: подскажите как... Отправлено: popper от Декабрь 17, 2011, 15:46 центр view
Код: QGraphicsView::rect().center() Код: QGraphicsView::mapToScene Название: Re: подскажите как... Отправлено: KontAr от Декабрь 18, 2011, 09:22 ерунда какая-то: в mouseMoveEvente команда
Код: centerOn(mapToScene(rect().center()); Название: Re: подскажите как... Отправлено: popper от Декабрь 18, 2011, 20:42 попробуй манипулировать с центром прямоугольника сцены Код: QGraphicsScene::sceneRect Код: QGraphicsView::mapFromScene Название: Re: подскажите как... Отправлено: KontAr от Декабрь 21, 2011, 17:05 что то не получается:
Код: void GraphicsView::mouseMoveEvent(QMouseEvent *event) уже нервов нехватает... Название: Re: подскажите как... Отправлено: popper от Декабрь 22, 2011, 09:59 Я ошибся сказав, что использовал centerOn.
Вот работающий код: Код: void GeoMapGraphicsView::mousePressEvent ( QMouseEvent * e ) Название: Re: подскажите как... Отправлено: GreatSnake от Декабрь 22, 2011, 11:57 Я ошибся сказав, что использовал centerOn. Некоторые поправки:Вот работающий код: 1. В mousePressEvent() вставить проверку: Код 2. Зачем в mouseMoveEvent() использовать довольно-таки тяжелый translate(), когда можно просто двигать вьюпорт так: Код 3. Наверное в mousePressEvent() и mouseReleaseEvent() нужно не игнорировать событие, а вызывать соответствующий метод базового класса. Название: Re: подскажите как... Отправлено: popper от Декабрь 22, 2011, 15:40 1. Согласен, для задачи топикстартера это нужно.
2. Сравнивая перемещение вью с помощью реализованного метода мыши и с помощью скроллов, которые тоже перемещаю мышью, не заметил существенной разности. Тут нужно тестировать. 3. Согласен Название: Re: подскажите как... Отправлено: KontAr от Январь 10, 2012, 20:17 почему то translate не работает. может флаг какой поставить надо?
|