qt如何拖动左键绘制矩形
时间: 2023-10-07 09:07:53 浏览: 109
你可以使用Qt的QWidget类,实现在左键按下并拖动时绘制矩形的功能。以下是一个基本的实现:
```cpp
#include <QWidget>
#include <QMouseEvent>
#include <QPainter>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent)
{
setMouseTracking(true); // 开启鼠标跟踪,以便能够捕捉鼠标移动事件
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
m_rectStart = event->pos();
m_rectEnd = event->pos();
update(); // 重新绘制窗口,以便显示新的矩形
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if (event->buttons() & Qt::LeftButton)
{
m_rectEnd = event->pos();
update();
}
}
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.setPen(Qt::red);
painter.drawRect(QRect(m_rectStart, m_rectEnd));
}
private:
QPoint m_rectStart;
QPoint m_rectEnd;
};
```
在这个实现中,我们重载了QWidget的三个函数:`mousePressEvent`、`mouseMoveEvent`和`paintEvent`。当鼠标左键按下时,记录下起始点和终止点的坐标,并且重新绘制窗口。当鼠标左键按下并拖动时,记录下终止点的坐标,并且重新绘制窗口。在`paintEvent`中,我们使用QPainter绘制一个红色矩形,其左上角为起始点,右下角为终止点。
阅读全文