我想在一幅图片中通过画矩形框进行标记,因此重写了和鼠标事件有关的函数:
void MainWindow::mouseMoveEvent(QMouseEvent *)
{
    QApplication::setOverrideCursor(Qt::CrossCursor);
    status->setText(QString::number(mapFromGlobal(QCursor::pos()).x()) +
                    "," +
                    QString::number(mapFromGlobal(QCursor::pos()).y()));
}
void MainWindow::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton){   //鼠标左键按下
        startPoint.setX(e->pos().x() -
                        ui->label->geometry().topLeft().x() +
                        ui->label->mapFrom(this,ui->label->geometry().topLeft()).x());
        startPoint.setY(e->pos().y() -
                        ui->label->geometry().topLeft().y() +
                        ui->label->mapFrom(this,ui->label->geometry().topLeft()).y());
        qDebug()<<"startPoint="<<startPoint;
    }
}
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton){   //鼠标左键释放
        endPoint.setX(e->pos().x() -
                      ui->label->geometry().topLeft().x() +
                      ui->label->mapFrom(this,ui->label->geometry().topLeft()).x());
        endPoint.setY(e->pos().y() -
                      ui->label->geometry().topLeft().y() +
                      ui->label->mapFrom(this,ui->label->geometry().topLeft()).y());
        qDebug()<<"endPoint="<<endPoint;
        drawSomething(startPoint,endPoint); //画一个矩形
        update();
    }
}
这样虽然能达到目的,但是按下鼠标左键拖动时不显示矩形框。