2014-11-20 3 views
1

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

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

Есть ли у вас какие-либо идеи, как достичь этого?

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

ответ

2

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

+0

большое спасибо, я проверю его :) – Tatarinho

1

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

Смежные вопросы