我显示了 80 个位置的图表,但是当我打印时,所有 100 个位置都会重新加载。我尝试使用它wGraphic->graph(0)->clearData();
但没有成功,而且wGraphic->clearPlottables(); wGraphic->clearGraphs();
它通常会导致内存错误。
。H
...
QCustomPlot *wGraphic; // Объявляем объект QCustomPlot
...
QVector <double> x; // пока так размеры выставим
QVector <double> y;
.cpp
// Инициализируем объект полотна для графика ...
wGraphic = new QCustomPlot();
ui->gridLayout->addWidget(wGraphic,2,0,5,5); // ... и устанавливаем
...
// Добавляем график на полотно
wGraphic->addGraph(wGraphic->xAxis, wGraphic->yAxis);
// Подписываем оси координат
wGraphic->xAxis->setLabel("итерации");
wGraphic->yAxis->setLabel("Дб");
// Устанавливаем максимальные и минимальные значения координат
wGraphic->xAxis->setRange(0,100);
wGraphic->yAxis->setRange(-50,50);
// Отрисовываем содержимое полотна
wGraphic->replot();
// добавляем красную линию на график
wGraphic->addGraph(); // red line
wGraphic->graph(0)->setPen(QPen(QColor(255, 110, 40)));
...
// тут размеры отрис векторов
x.reserve(80);
y.reserve(80);
// устанавливаем одно значение для всех элементов
x.fill(0);
y.fill(0);
...
x << str_x.toDouble();
y << str_y.toDouble();
// qDebug() << "str_priem: " << str_priem;
qDebug() << "str_x: " << str_x;
qDebug() << "str_y: " << str_y;
// wGraphic->graph(0)->clearData();
wGraphic->graph(0)->setData(y,x); // Устанавливаем координаты точек графика
// wGraphic->clearPlottables(); выдаёт ошибку памяти
// wGraphic->clearGraphs(); выдаёт ошибку памяти
// Отрисовываем содержимое полотна
wGraphic->replot();
// ???
wGraphic->update();
// Очищаем принятую строку
str_priem.clear();
我希望有这样的东西
我用从链接 https://github.com/eugesh/QCustomPlot下载的文件替换了qcustomplot.cpp
这些文件 ,其工作方式与以前的版本相同qcustomplot.h
优点是,现在程序在调用时不会崩溃clear
。
void MainWindow::slotProcessDatagrams()
{
QByteArray baDatagram_in;
do {
baDatagram_in.resize(m_pudp_in->pendingDatagramSize());
m_pudp_in->readDatagram(baDatagram_in.data(), baDatagram_in.size());
} while(m_pudp_in->hasPendingDatagrams());
QDataStream in(&baDatagram_in, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_5_3);
in >> str_priem; // принимаем сообщение
str_x = str_priem.section(' ',0,0);
str_y = str_priem.section(' ',1);
x << str_x.toDouble();
y << str_y.toDouble();
qDebug() << "str_x: " << str_x;
qDebug() << "str_y: " << str_y;
// чистим старое отрисовываем новое
wGraphic->graph(0)->clear();
wGraphic->graph(0)->rescaleAxes();
wGraphic->graph(0)->setData(y,x); // Устанавливаем координаты точек графика
// Отрисовываем содержимое полотна
wGraphic->replot();
// Очищаем принятую строку
str_priem.clear();
}
如果我正确理解了这个问题,那么为了清除图表,我实现了该函数:
我称之为:
总的来说,只有一个错误,出于某种原因我以为通过设置向量的大小,他会自己把所有东西都拉直,但事实证明并非如此
确实,跳了一个新的错误(由于某种原因,最后一个点和第一个点由于某种原因连接在一起,我不知道如何打破它)