Перетащите прямоугольник на изображение в Qt

Я думаю, есть много способов добиться этого. У меня есть приложение, в котором видеопоток отображается поверх пользовательского QWidget, который у меня есть подклассы от QLabel, и рисует кадры с помощью QPainter. Учитывая это, можно ли позволить пользователю перетаскивать прямоугольник по изображению и получать координаты? Требование состоит в том, чтобы прямоугольник был виден во время перетаскивания.

Заранее спасибо,


person Didac Perez Parera    schedule 01.02.2013    source источник
comment
Как пользователь выбирает прямоугольник? Является ли прямоугольник простым? Если так, то вполне возможно   -  person UmNyobe    schedule 01.02.2013


Ответы (3)


Взгляните на QRubberBand. Это позволяет вам разместить такой прямоугольник поверх, например. QLabel. В документации также есть пример перемещения и изменения размера резинки с помощью мыши.

person Frank Osterfeld    schedule 02.02.2013

у QGraphicsView есть void setRubberBandSelectionMode ( Qt::ItemSelectionMode mode ), но я не знаю, есть ли у QLabel аналогичная функция...

возможно, вам нужно нарисовать свой собственный прямоугольник, пока пользователь перетаскивает прямоугольник и ловит его при отпускании мыши

так долго зай

person Zaiborg    schedule 01.02.2013

В вашем виджете вы можете отслеживать события нажатия и отпускания мыши и отслеживать, где на виджете находятся углы прямоугольника выбора. Для рисования прямоугольника я бы посмотрел на QStyle::drawFocusRect. Я думаю, что цель этого состоит в том, чтобы нарисовать прямоугольник, который вы сможете увидеть независимо от того, что за ним.

Или, возможно, попробуйте это:

QStylePainter painter(this);
QStyleOptionFocusRect option;
option.initFrom(this);
option.backgroundColor = palette().color(QPalette::Background);
painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);
person cppguy    schedule 01.02.2013