Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: sdwdd от Март 04, 2009, 05:05



Название: Передвижение QGraphicsItem
Отправлено: sdwdd от Март 04, 2009, 05:05
Привет всем.

Имеется QGraphicsScene в котором лежит 2 QGraphicsItem.
В первый загружается картинка с помощью QPixmap.
Второй должен быть полупрозрачным прямоугольником который будет служить для выделения определенной области картинки с возможностью эту область перетаскивать мышкой.

Для создания области выделения наследую QGraphicsRectItem:
Код:
SelectionArea::SelectionArea()
        : QGraphicsRectItem()
{
    // set styling
    setRect(0.0, 0.0, 32.0, 32.0);
    setBrush( QBrush( QColor(0, 0, 255, 127 )) );
    setPen(QPen( Qt::SolidLine ));
    setZValue( 9.99 );

    // events
    setAcceptDrops(true);
    setCursor(Qt::OpenHandCursor);
}

Теперь нужно добавить в SelectionArea возможность перетаскивать его мышью в рамках родительской сцены.

Начал вот копать в QGraphicsItem::dragEnterEvent и т.п., но похоже он предназначен для других целей, там к курсору бинядтся иконки по MIME-типу и все такое.

Как можно реализовать передвижение SelectionArea?

Спасибо.


Название: Re: Передвижение QGraphicsItem
Отправлено: sdwdd от Март 04, 2009, 05:10
Решено: setFlag(QGraphicsItem::ItemIsMovable, true);
 :)


Название: Re: Передвижение QGraphicsItem
Отправлено: Khs от Март 04, 2009, 08:52
Спрошу свой вопросик, раз уж такая тема появилась, вроде к топику подходит :)

При передвижении QGraphicsItem (небольших размеров, на других не смарел) только у меня курсор "не поспевает" за позицией за которою был схвачем айтем? Т.е. я так понимаю дело в перерисовке чтоли.

Думаю дело не в версии qt, смарел на нескольких. Наверно либо в железе (хотя посмотрел draw приложение на WPF (.Net), там такого не замечается), либо в необходимых флагах оптимизации (OptimizationFlags) и режима обновления (ViewportUpdateMode) QGraphicsView.
Вроде поэкспериментировал с комбинациями  :), но так и не нашел оптимальной. Только вроде при ViewportUpdateMode = FullViewportUpdate, курсор при передвижении айтема, держит позицию захвата, но не думаю что данный режим есть гуд (хотя каждый для своих целей я думаю) :)

Хотя щас посмарел и при FullViewportUpdate такое ж вродь ;\, мож оно так и должно быть?!  ???