paintEvent()里面不能对折现上的点进行显示吗?
时间: 2024-04-14 08:26:32 浏览: 141
Qt+update函数+paintEvent事件
5星 · 资源好评率100%
非常抱歉给您带来困惑。在QChartView的paintEvent()方法中,确实可以对折线上的点进行显示,只是需要使用不同的方法来实现。
下面是一个示例代码,展示了如何在QChartView的paintEvent()方法中显示折线上的点:
```cpp
class CustomChartView : public QChartView {
public:
CustomChartView(QChart *chart, QWidget *parent = nullptr) : QChartView(chart, parent) {}
protected:
void paintEvent(QPaintEvent *event) override {
QChartView::paintEvent(event);
QPainter painter(viewport());
painter.setRenderHint(QPainter::Antialiasing);
// 获取图表对象
QChart *chart = this->chart();
if (!chart)
return;
// 遍历图表中的系列
QList<QAbstractSeries *> seriesList = chart->series();
for (QAbstractSeries *series : seriesList) {
// 判断是否为折线系列
QLineSeries *lineSeries = qobject_cast<QLineSeries *>(series);
if (lineSeries) {
// 获取折线上的点,并绘制
QPointF point;
for (int i = 0; i < lineSeries->count(); ++i) {
point = lineSeries->at(i);
painter.drawEllipse(point, 5, 5); // 以点为中心绘制椭圆表示点的大小
}
}
}
}
};
```
在这个示例中,我们创建了一个名为CustomChartView的自定义QChartView类,并重写了其paintEvent()方法。在paintEvent()方法中,我们首先调用QChartView的paintEvent()方法来绘制图表。然后,我们获取图表对象,并遍历图表中的系列。
如果发现某个系列是折线系列(QLineSeries),我们通过调用lineSeries->at(i)方法获取折线上的每个点的坐标,并使用painter.drawEllipse()方法以点为中心绘制一个椭圆来表示点的大小。
最后,我们将CustomChartView作为窗口部件添加到应用程序中,以展示带有自定义点大小的折线图。
这样,您应该能够在自定义的QChartView类的paintEvent()方法中成功显示折线上的点,并设置点的大小。请注意,这里只处理了折线系列(QLineSeries),您可以根据需要进行适当的修改和扩展。
阅读全文