我想在一幅图片中通过画矩形框进行标记,因此重写了和鼠标事件有关的函数:
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();
}
}
这样虽然能达到目的,但是按下鼠标左键拖动时不显示矩形框。