Вы можете использовать QRubberBand
. Вот пример из документации Qt, когда вы хотите реализовать его в виджете:
void Widget::mousePressEvent(QMouseEvent *event)
{
origin = event->pos();
if (!rubberBand)
rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
rubberBand->setGeometry(QRect(origin, QSize()));
rubberBand->show();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
rubberBand->setGeometry(QRect(origin, event->pos()).normalized());
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
rubberBand->hide();
// determine selection, for example using QRect::intersects()
// and QRect::contains().
}
Если вы реализуете его в другом классе и хотите, чтобы отображаться в виджете вы должны быть осторожны, о системе координат , Это потому, что event->pos()
в другой системе координат, чем у вашего виджета, так что вместо event->pos()
вы должны использовать:
myWidget->mapFromGlobal(this->mapToGlobal(event->pos()))
большое спасибо, я проверю его :) – Tatarinho