写一个qt用鼠标绘制自定义大小圆圈的代码
时间: 2023-09-15 16:05:40 浏览: 371
### 回答1:
这是一个使用 Qt 画图工具绘制自定义大小圆圈的例子:
```
#include <QApplication>
#include <QWidget>
#include <QPainter>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.resize(400, 300);
QPainter painter(&w);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::red);
painter.setBrush(Qt::red);
int x = 100; // 圆圈的 x 坐标
int y = 100; // 圆圈的 y 坐标
int radius = 50; // 圆圈的半径
painter.drawEllipse(x - radius, y - radius, radius * 2, radius * 2);
w.show();
return a.exec();
}
```
请注意,在这个例子中,圆圈的坐标和半径都是固定的。如果你希望使用鼠标动态改变圆圈的位置和大小,可以使用鼠标事件处理器(mouse event handler)来实现。你可以在鼠标按下时记录当前鼠标的位置,在鼠标移动时动态更新圆圈的位置和大小,在鼠标释放时结束绘制。
### 回答2:
以下是一个使用Qt编写的用鼠标绘制自定义大小圆圈的代码示例:
```cpp
#include <QtWidgets>
class DrawingWidget : public QWidget
{
public:
DrawingWidget(QWidget *parent = nullptr) : QWidget(parent)
{
setFixedSize(400, 400);
setMouseTracking(true);
}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
foreach (QPointF point, m_points)
{
painter.drawEllipse(point, m_radius, m_radius);
}
}
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
m_points.append(event->pos());
update();
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if (event->buttons() & Qt::LeftButton)
{
m_points.append(event->pos());
update();
}
}
private:
QList<QPointF> m_points;
int m_radius = 10;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
DrawingWidget widget;
widget.show();
return app.exec();
}
```
代码解析:
1. 创建一个名为`DrawingWidget`的自定义窗口部件,继承自`QWidget`。
2. 在构造函数中设置窗口大小为400x400,并开启鼠标追踪的功能。
3. 重写`paintEvent`函数,在其中使用`QPainter`绘制所有的圆圈。
4. 重写`mousePressEvent`函数,在鼠标左键按下时在当前鼠标位置绘制一个圆圈,并更新窗口。
5. 重写`mouseMoveEvent`函数,在鼠标左键按下并移动时,在当前鼠标位置添加一个圆圈,并更新窗口。
6. 在`main`函数中创建一个`QApplication`实例和一个`DrawingWidget`实例,并展示窗口。
当运行该代码后,会弹出一个窗口。在该窗口内,当你按住鼠标左键并移动时,会在鼠标位置绘制一个自定义大小的圆圈。
### 回答3:
以下是一个使用Qt框架编写的代码段,该代码允许使用鼠标绘制自定义大小的圆圈:
```cpp
#include <QtWidgets>
#include <QWidget>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void paintEvent(QPaintEvent *) override
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::black, 2));
for (const QRectF &rect : m_circles) {
painter.drawEllipse(rect);
}
}
void mousePressEvent(QMouseEvent *event) override
{
m_lastPos = event->pos();
}
void mouseMoveEvent(QMouseEvent *event) override
{
int width = abs(event->x() - m_lastPos.x());
int height = abs(event->y() - m_lastPos.y());
int x = qMin(event->x(), m_lastPos.x());
int y = qMin(event->y(), m_lastPos.y());
QRectF rect(x, y, width, height);
m_circles.append(rect);
update();
m_lastPos = event->pos();
}
private:
QList<QRectF> m_circles;
QPoint m_lastPos;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
```
这段代码创建了一个自定义的QWidget子类`MyWidget`,当鼠标在窗口上拖动时,会根据鼠标的位置绘制一个矩形,然后在绘制的矩形上绘制一个圆形。
在`paintEvent`函数中,我们使用`QPainter`类来绘制圆圈。`QPainter`类可以设置渲染提示和画笔样式,然后使用`drawEllipse`函数来绘制圆圈。`m_circles`列表保存绘制的所有圆圈的矩形区域。
在`mousePressEvent`和`mouseMoveEvent`函数中,我们记录鼠标的位置,并计算出绘制圆圈所需的矩形的位置和大小。然后将该矩形添加到`m_circles`列表中,并调用`update`函数来刷新窗口,触发`paintEvent`函数的调用来重新绘制圆圈。
最后,在`main`函数中,我们创建了一个`MyWidget`对象并显示出来,然后启动应用程序的事件循环。
要使用该代码,请将其保存为.cpp文件,然后使用Qt编译器编译并运行。运行后,您可以在窗口上使用鼠标绘制自定义大小的圆圈。
阅读全文