Qt小部件中的选择区域

时间:2014-11-20 20:59:38

标签: c++ qt graphics selection area

我写了这篇文章,因为我的选区有问题。

如果单击Windows桌面,然后拖动鼠标,您将看到选择区域。我正在努力实现类似的事情。

你有什么想法,如何实现这个目标?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:3)

它被称为"rubber band"。您需要找到使用QRubberBand类的示例。我不能将一个小样本与相对较大的项目分开,但总的来说它不是很复杂而且很简单。

答案 1 :(得分:2)

您可以使用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()))

{{1}}