Область выделения в виджете Qt

Я написал этот пост, потому что у меня проблема с областью выбора.

Если вы нажмете на рабочий стол Windows и перетащите мышью, вы увидите область выбора. Я пытаюсь добиться в целом подобной вещи.

У вас есть идеи, как этого добиться?

Спасибо за любое предложение.

1

Решение

Это называется «резинка». Вам нужно найти пример использования класса QRubberBand. Я не могу отделить маленький образец от относительно большого проекта, но в целом он не очень сложен и просто работает.

3

Другие решения

Ты можешь использовать 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()))

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector