qt 鼠标画图
时间: 2023-07-05 18:08:37 浏览: 82
在Qt中,你可以使用QPainter类来绘制图形。下面是一个简单的示例,演示如何使用鼠标在QWidget上绘制直线:
```cpp
#include <QtWidgets>
class DrawingWidget : public QWidget
{
public:
DrawingWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
setFixedSize(400, 400); // 设置窗口大小
// 初始化画笔
m_pen = QPen(Qt::black, 2, Qt::SolidLine, Qt::RoundCap);
// 初始化起点
m_lastPoint = QPoint(-1, -1);
}
protected:
void paintEvent(QPaintEvent *) override
{
QPainter painter(this);
painter.setPen(m_pen);
painter.drawLines(m_lines);
}
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton) {
// 记录起点
m_lastPoint = event->pos();
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if (event->buttons() & Qt::LeftButton) {
// 绘制直线
m_lines.append(QLine(m_lastPoint, event->pos()));
m_lastPoint = event->pos();
update();
}
}
private:
QPen m_pen; // 画笔
QPoint m_lastPoint; // 上一个点
QVector<QLine> m_lines; // 直线集合
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DrawingWidget w;
w.show();
return a.exec();
}
```
在上面的代码中,我们继承了QWidget类,并重写了paintEvent()、mousePressEvent()和mouseMoveEvent()方法。paintEvent()方法在窗口需要重新绘制时被调用,我们在这个方法中使用QPainter类绘制直线。mousePressEvent()和mouseMoveEvent()方法分别响应鼠标按下和移动事件,并记录下起点和终点,然后在paintEvent()方法中绘制直线。
运行这个程序,你会看到一个窗口,你可以在上面用鼠标画直线。当你松开鼠标时,直线就会被绘制出来。
阅读全文