可以根据鼠标移动来绘制点,可以修改 paintEvent
和 mouseMoveEvent
方法以实现此功能。
以下是相应的代码示例:
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
QPen pen;
pen.setWidth(2); // 设置画笔宽度为2个像素
painter.setPen(pen);
painter.setRenderHint(QPainter::Antialiasing); // 添加抗锯齿效果
painter.drawImage(event->rect(), image, event->rect());
if (isDrawing) {
QPainterPath path;
path.moveTo(lastPoint);
path.lineTo(currentPoint);
painter.drawPath(path);
}
}
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
lastPoint = event->pos();
isDrawing = true;
}
}
void mouseMoveEvent(QMouseEvent *event) override {
if ((event->buttons() & Qt::LeftButton) && isDrawing) {
currentPoint = event->pos();
drawLineTo(currentPoint);
}
}
void mouseReleaseEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton && isDrawing) {
currentPoint = event->pos();
drawLineTo(currentPoint);
isDrawing = false;
}
}
private:
void drawLineTo(const QPoint &endPoint) {
QPainter painter(&image);
QPen pen;
pen.setWidth(3); // 设置画笔宽度为3个像素
painter.setPen(pen);
painter.drawLine(lastPoint, endPoint);
update(); // 强制重绘
lastPoint = endPoint;
}
通过记录当前鼠标的位置(currentPoint
),并在 paintEvent
中绘制从上一个点到当前点的线段,可以实现根据鼠标移动画点的功能。希望这对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问