QChartview在鼠标识别到曲线上点时绘制小圆圈
时间: 2024-03-13 20:46:15 浏览: 192
要在QChartView上绘制小圆圈,可以通过继承QChartView并重写其mousePressEvent()方法来实现。具体步骤如下:
1. 继承QChartView并重写其mousePressEvent()方法。在该方法中,获取鼠标点击位置的坐标,并使用QChart的mapToValue()方法将其转换为对应的数据值。
2. 创建一个QScatterSeries对象,并将其添加到QChart中。将鼠标点击位置的数据值设为QScatterSeries的唯一数据点。
3. 创建一个QPen对象和一个QBrush对象,用于绘制小圆圈的轮廓和填充。将QScatterSeries的markerPen和markerBrush属性分别设置为这两个对象。
4. 刷新QChart,使新的QScatterSeries能够显示在界面上。
下面是一个示例代码,演示如何在QChartView上绘制小圆圈:
```cpp
class MyChartView : public QChartView
{
Q_OBJECT
public:
MyChartView(QChart *chart, QWidget *parent = nullptr)
: QChartView(chart, parent)
{
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
// 获取鼠标点击位置的坐标
QPointF point = chart()->mapToValue(event->pos());
// 创建一个QScatterSeries对象,并将其添加到QChart中
QScatterSeries *series = new QScatterSeries();
series->append(point);
chart()->addSeries(series);
// 设置QScatterSeries的markerPen和markerBrush属性,用于绘制小圆圈的轮廓和填充
QPen pen(Qt::black, 1);
QBrush brush(Qt::red);
series->setMarkerSize(10);
series->setMarkerShape(QScatterSeries::MarkerShapeCircle);
series->setMarkerPen(pen);
series->setMarkerBrush(brush);
// 刷新QChart
chart()->update();
QChartView::mousePressEvent(event);
}
};
```
在该示例中,我们继承了QChartView,并重写了其mousePressEvent()方法。在该方法中,我们首先获取鼠标点击位置的坐标,并将其转换为对应的数据值。然后,创建一个QScatterSeries对象,并将其添加到QChart中。接着,我们设置QScatterSeries的markerPen和markerBrush属性,用于绘制小圆圈的轮廓和填充。最后,我们刷新QChart,使新的QScatterSeries能够显示在界面上。
阅读全文