RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1533212
Accepted
timob256
timob256
Asked:2023-07-30 05:43:48 +0000 UTC2023-07-30 05:43:48 +0000 UTC 2023-07-30 05:43:48 +0000 UTC

如何清除QCustomPlot中的绘图?

  • 772

我显示了 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();
}

在此输入图像描述

c++
  • 2 2 个回答
  • 98 Views

2 个回答

  • Voted
  1. eugesh
    2023-07-31T14:58:03Z2023-07-31T14:58:03Z

    如果我正确理解了这个问题,那么为了清除图表,我实现了该函数:

    template <class DataType>
    void QCPAbstractPlottable1D<DataType>::clear()
    {
        if (!mDataContainer.isNull())
            if (!mDataContainer->isEmpty())
                mDataContainer->clear();
    }
    

    我称之为:

                graph->clear();
                graph->rescaleAxes();
    
    • 2
  2. Best Answer
    timob256
    2023-08-09T04:07:38Z2023-08-09T04:07:38Z

    总的来说,只有一个错误,出于某种原因我以为通过设置向量的大小,他会自己把所有东西都拉直,但事实证明并非如此

    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);
    
        if(my_int >= 80)
        {
            // clear firs element
    //        x.pop_back();
    //        y.pop_back();
    //        x.removeLast();
    //        y.removeLast();
            x.pop_front(); //последний из вектора 
            y.pop_front();
    
            x << str_x.toDouble();
            y << str_y.toDouble();
        }
        else
        {
            x << str_x.toDouble();
            y << str_y.toDouble();
            my_int = my_int + 1;
        }
    
        // чистим старое отрисовываем новое
        wGraphic->graph(0)->clear();
        wGraphic->graph(0)->rescaleAxes();
    
    //    wGraphic->replot();     // Отрисовываем содержимое полотна
        wGraphic->graph(0)->setData(y,x);     // Устанавливаем координаты точек графика
    
        wGraphic->replot();     // Отрисовываем содержимое полотна
    
        // Очищаем принятую строку
        str_priem.clear();
    }
    

    确实,跳了一个新的错误(由于某种原因,最后一个点和第一个点由于某种原因连接在一起,我不知道如何打破它)

    在此输入图像描述

    • 0

相关问题

  • 编译器和模板处理

  • 指针。找到最小数量

  • C++,关于枚举类对象初始化的问题

  • 函数中的二维数组

  • 无法使用默认构造函数创建类对象

  • C++ 和循环依赖

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5