Qt 小部件中的选择区域

Tat*_*nho 2 c++ graphics qt selection area

我的选择区域有问题。

如果您单击 Windows 桌面并拖动鼠标,您将看到选择区域。我正在努力实现大致相似的目标。

您对如何实现这一目标有什么想法吗?

Nej*_*jat 7

您可以使用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().
 }
Run Code Online (Sandbox Code Playgroud)

如果您在其他类中实现它并希望在小部件中显示,您应该小心坐标系。这是因为event->pos()它的坐标系与您的小部件的坐标系不同,因此event->pos()您应该使用:

myWidget->mapFromGlobal(this->mapToGlobal(event->pos()))