一、头文件中重载鼠标移动、按下、释放的函数,鼠标按下的标记,以及圆的坐标
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void paintEvent(QPaintEvent *event) override;
bool pushButton = false;
QPoint fastPoint;
int r = 50;
二、在.cpp文件中添加函数
void MainWindow::mousePressEvent(QMouseEvent *event)
{
QPoint p = event->pos();
if(event->button() == Qt::LeftButton && p.x() > fastPoint.x()-r/2 &&
p.x() <fastPoint.x()+r/2 && p.y() > fastPoint.y() -r/2
&& p.y() < fastPoint.y() + r/2)
pushButton = true;
}
//鼠标释放
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
pushButton = false;
}
//鼠标移动事件
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if(pushButton)
{
fastPoint = event->pos();
update();//很重要,画出更新位置
}
}
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);//反走样
QFont font;
painter.save();//保存旧的painter
font = painter.font();
font.setPointSize(12);
painter.setFont(font);
painter.setBrush(QBrush(QColor(200,200,100)));
painter.drawEllipse(fastPoint,r,r);//原点为fastPoint,半径为50
painter.restore();//回到旧的painter
}