QT开发中文网

QT QPainter实时绘制鼠标点x,y坐标直线,线宽1像素

要在 Qt 中使用 QPainter 实时绘制鼠标点 (x, y) 之间的直线,并且线宽为 1 像素,可以按照以下步骤实现:

  1. 创建一个自定义的 QWidget。
  2. 重载 mousePressEvent()mouseMoveEvent() 方法来捕获鼠标的位置。
  3. 使用 paintEvent() 方法进行绘制。

下面是一个简单的示例代码,演示了如何实现这个功能:

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QMouseEvent>

class DrawingWidget : public QWidget {
    Q_OBJECT

public:
    DrawingWidget(QWidget *parent = nullptr)
        : QWidget(parent), lastPoint(-1, -1) {
        setFixedSize(800, 600); // 设置窗口大小
    }

protected:
    void paintEvent(QPaintEvent *event) override {
        Q_UNUSED(event);

        QPainter painter(this);
        painter.setPen(QPen(Qt::black, 1)); // 设置线条颜色和宽度

        if (lastPoint != QPoint(-1, -1)) { 
            painter.drawLine(lastPoint, currentPoint); // 绘制从最后一点到当前点的直线
        }
    }

    void mousePressEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            lastPoint = event->pos(); // 获取鼠标按下的位置
            currentPoint = lastPoint; // 初始化当前点为最后一点
            update(); // 刷新窗口以重绘
        }
    }

    void mouseMoveEvent(QMouseEvent *event) override {
        if (event->buttons() & Qt::LeftButton && lastPoint != QPoint(-1, -1)) {
            currentPoint = event->pos(); // 更新当前点位置
            update(); // 刷新窗口以重绘
        }
    }

    void mouseReleaseEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            lastPoint = QPoint(-1, -1); // 重置最后一点,使其不再绘制
            update(); // 刷新窗口以重绘
        }
    }

private:
    QPoint lastPoint;   // 最后一个点击的点
    QPoint currentPoint; // 当前鼠标所在位置点
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    
    DrawingWidget w;
    w.show();

    return app.exec();
}

代码说明:

  • DrawingWidget 是一个自定义的 QWidget 类。
  • 在构造函数中设置固定的窗口大小。
  • 使用 paintEvent 来处理绘图逻辑,只有在有有效坐标时才会绘制线条。
  • mousePressEvent 用于记录按下时的位置,并触发重绘。
  • mouseMoveEvent 在鼠标移动时更新当前位置并触发重绘。
  • mouseReleaseEvent 用于重置状态,以便不再画出任何新的线段。

你可以将这段代码放入一个新的 Qt 项目中并编译运行。这样,你就能够实时地用鼠标拖动画出直线了。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=12676

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?