Я думаю, что есть много способов достичь этого. У меня есть приложение, в котором видеопоток отображается через пользовательский QWidget, который у меня есть подклассы из QLabel, и рисование кадров с использованием QPainter. Учитывая это, возможно ли позволить пользователю перетащить прямоугольник над изображением и получить координаты? Требование состоит в том, что прямоугольник должен быть виден во время перетаскивания.
Заранее спасибо,
QGraphicsView
имеет void setRubberBandSelectionMode ( Qt::ItemSelectionMode mode )
но я не знаю, если QLabel
имеет похожую особенность …
возможно, вам нужно нарисовать собственный прямоугольник, пока пользователь перетаскивает прямоугольник и ловит его на отпускание мыши
так долго, зай
В вашем виджете вы можете отслеживать нажатие и отпускание мыши и отслеживать, где на виджете находятся углы прямоугольника выделения. Для рисования прямоугольника я бы взглянул на QStyle::drawFocusRect
, Я думаю, что цель этого состоит в том, чтобы нарисовать прямоугольник, который вы сможете увидеть независимо от того, что стоит за ним.
Или, возможно, попробуйте это:
QStylePainter painter(this);
QStyleOptionFocusRect option;
option.initFrom(this);
option.backgroundColor = palette().color(QPalette::Background);
painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);
Посмотри на QRubberBand. Это позволяет вам разместить такой прямоугольник поверх, например, QLabel. В документации также приведен пример перемещения и изменения размера резиновой ленты с помощью мыши.