Название: (РЕШЕНО) Не помню, есть ли скроллинг сцены при драге айтемов. Отправлено: Гурман от Март 23, 2015, 01:24 Просто не помню, вроде видел где-то, но не могу найти. Когда внутри вьюпорта перемещается курсор с нажатой кнопкой, НО ВАЖНО НЕ таская курсором саму сцену (это и так работает с флагом ScrollHandDrag), а таская айтем (но НЕ QDrag) - вроде было такое, что вьюпорт следует за положением курсора на сцене. То есть, если курсор пытается выехать за край сцены, то вьюпорт перемещается в этом направлении. Но когда кнопка мыши отпущена, то курсор выходит из вьюпорта. Не могу найти - или такого нет, мне в полвторого ночи мерещится, или не могу найти. Кто помнит точно? Надо ли это самому обрабатывать, или достаточно флаг взвести?
Название: Re: Не помню, есть ли скроллинг сцены при драге айтемов. Отправлено: GreatSnake от Март 23, 2015, 08:41 Кто помнит точно? Надо ли это самому обрабатывать, или достаточно флаг взвести? Самому :(Qt-ишники autoScroll сделали только для ItemView, а про GraphicsView забыли :( Название: Re: Не помню, есть ли скроллинг сцены при драге айтемов. Отправлено: Гурман от Март 23, 2015, 18:50 Ну... не сложно совсем - псевдо-драг производится в перегруженном методе mouseMoveEvent(QGraphicsSceneMouseEvent *event) некоего айтема, который "таскается" по сцене. То есть, если имеется некая точка dragPoint, которая не должна выходить из вьюпорта, то сцене с помощью invokeMethod отправляется через очередь сигнал с координатой этой точки в системе координат сцены.
Код: parentScene()->metaObject()->invokeMethod( ms, "ensurePoint", Qt::QueuedConnection, Q_ARG( QPointF, dragPoint ) ); А в самой сцене ловушка сигнала выглядит вот так: Код: void MainScene::ensurePoint( QPointF dragPoint ) И всё, при приближении точки на 50 пикселов сцены вьюпорт едет в соответствующем направлении. Но если без очереди вызвать напрямую, то падает, очевидно конфликт циклов обработки событий. Влом детально разбираться, чего с чем. Название: Re: (РЕШЕНО) Не помню, есть ли скроллинг сцены при драге айтемов. Отправлено: GreatSnake от Март 23, 2015, 19:35 Только я бы плясал не от сцены, а от вью.
Название: Re: (РЕШЕНО) Не помню, есть ли скроллинг сцены при драге айтемов. Отправлено: Гурман от Март 23, 2015, 19:49 если вью один единственный (в моём случае иначе и не предвидится), то без разницы где views().at(0) написать
|