题记:ui.qcp->graph(0)->data().data()->clear();有用 ui.qcp->graph(0)->data()->clear();,无用,且软件不会报错!
更详细地讨论 QCustomPlot 中的数据清除方法。
QCPGraph::data() 返回一个 QSharedPointer<QCPGraphDataContainer>,该容器提供了对图表数据的访问。实际上,data() 方法返回的是一个智能指针,智能指针的 data() 方法将返回其原始指针。因此,使用 data().data()->clear() 访问并清除底层数据。
#include <QApplication>
#include "qcustomplot.h"
#include "ui_mainwindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow mainWindow;
Ui::MainWindow ui;
ui.setupUi(&mainWindow);
// 创建QCustomPlot对象
ui.qcp = new QCustomPlot(&mainWindow);
// 添加一个图表
ui.qcp->addGraph();
// 为图表添加一些数据
QVector<double> x(101), y(101);
for (int i = 0; i < 101; ++i)
{
x[i] = i / 50.0 - 1;
y[i] = x[i] * x[i];
}
ui.qcp->graph(0)->setData(x, y);
// 显示图表
ui.qcp->rescaleAxes();
ui.qcp->replot();
mainWindow.show();
// 清除图表数据
ui.qcp->graph(0)->data().data()->clear(); // 正确的方式来清除数据
// 更新显示
ui.qcp->replot();
return app.exec();
}
在这里,ui->qcp->graph(0)->data().data()->clear(); 是正确的,因为 data() 返回一个 QSharedPointer<QCPGraphDataContainer>,而 data().data() 返回原始指针,从而允许调用 clear() 方法。
另一个博主的清除数据的方法记录




