您可以使用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()))
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |