М
Миша12 грудня 2017 р. 06:58

QCustomPlot ложится при большем количестве точек

QCustomPlot

Добрый день.
На графике строю точки следующим образом. При большем количестве точек, программа ложится. Видимо это зависит от размера вектора. Может быть вы знаете в чем дело и как исправить?
if (XBuy1.size()>0)
    {
        NGraph=NGraph+1;
        NGraphBuy=NGraph;
        ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);  //Создает новый график внутри сюжета
        //ui->customPlot->graph(NGraph)->setPen(QPen(Qt::red));
        ui->customPlot->graph(NGraph)->setData(XBuy1, YBuy1);//сообщает данные графику
 
        //ui->customPlot->graph(1)->setLineStyle(QCPGraph::lsLine); //http://www.qcustomplot.com/documentation/classQCPGraph.html  lsLine - линия, lsNone- не рисует, lsImpulse -вертикальные линии до точки,lsStepCenter - горизонтальная линия идущая каскадом
        QCPScatterStyle myScatter; //описывает точки http://www.qcustomplot.com/documentation/classQCPScatterStyle.html
        myScatter.setShape(QCPScatterStyle::ssTriangle);//тип точки
        myScatter.setPen(QPen(Qt::green)); //внешний цвет точки
        myScatter.setBrush(Qt::green);  //внутренний цвет точки
        myScatter.setSize(SizePaint);  //размер точки
        ui->customPlot->graph(NGraph)->setScatterStyle(myScatter);
        ui->customPlot->graph(NGraph)->setLineStyle(QCPGraph::lsNone); //убирает линию
    }

 

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

4
Evgenii Legotckoi
  • 12 грудня 2017 р. 13:26

Добрый день
Если это зависит от количества... то чисто теоретически, возможно не хватает памяти на вашем ПК.

Структура вектора такова, что они в минимально варианте содержит только количество элементов и указатели в памяти на эти элементы. Поэтому размер будет ограничен максимальным целочисленным числом, которое может прожевать ПК.
Возможно проблема в чём-то другом, пробовали дебажить и смотреть, где падает?
    М
    • 13 грудня 2017 р. 02:24

    Странно. Само прошло. Но при попытке построить линии на видимой части экрана программа все еще исправно ложится. Дебаг ничего не говорит.

    Вот такой код стоял для построения линий на видимой части.
    if (XSell1.size()>0)//добовление линии между точками buy-sell на видимом участке
        {
            //NGraph=NGraph+1;
            for (long long i=0;i<YSell1.size();++i)
            {
                if((XBuy1[i]>FirstVisibleBar&&XBuy1[i]<LastVisibleBar)||(XSell1[i]>FirstVisibleBar&&XSell1[i]<LastVisibleBar))
                {
                    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);  //Создает новый график внутри сюжета
                    QPen Pen1;
                    if(YSell1[i]>YBuy1[i])
                    {
                        Pen1.setColor(QColor(Qt::green));//ui->customPlot->graph()->setPen(QPen(Qt::green)); //graph()- Возвращает граф с индексом . Если индекс недействителен, он возвращает 0. -> line color blue for first graph
                    }
                    else
                    {
                        Pen1.setColor(QColor(Qt::red));//ui->customPlot->graph()->setPen(QPen(Qt::red));
                    }
                    ui->customPlot->graph()->addData(XBuy1[i],YBuy1[i]);
                    ui->customPlot->graph()->addData(XSell1[i],YSell1[i]);
                    Pen1.setWidthF(SizeLineBuy);//ширина линии
                    ui->customPlot->graph()->setPen(Pen1);
    
                }
            }
        }
        if (XCover1.size()>0)//добовление линии между точками short-cover на видимом участке
        {
            //NGraph=NGraph+1;
            for (long long i=0;i<YCover1.size();++i)
            {
                if((XShort1[i]>FirstVisibleBar&&XShort1[i]<LastVisibleBar)||(XCover1[i]>FirstVisibleBar&&XCover1[i]<LastVisibleBar))
                {
                    ui->customPlot->addGraph(ui->customPlot->xAxis, ui->customPlot->yAxis);  //Создает новый график внутри сюжета
                    QPen Pen1;
                    if(YShort1[i]>YCover1[i])
                    {
                        Pen1.setColor(QColor(Qt::green));//ui->customPlot->graph()->setPen(QPen(Qt::green)); //graph()- Возвращает граф с индексом . Если индекс недействителен, он возвращает 0. -> line color blue for first graph
                    }
                    else
                    {
                        Pen1.setColor(QColor(Qt::red));//ui->customPlot->graph()->setPen(QPen(Qt::red));
                    }
                    ui->customPlot->graph()->addData(XShort1[i],YShort1[i]);
                    ui->customPlot->graph()->addData(XCover1[i],YCover1[i]);
                    Pen1.setWidthF(SizeLineBuy);//ширина линии
                    ui->customPlot->graph()->setPen(Pen1);
                }
            }
        }

     

      Evgenii Legotckoi
      • 13 грудня 2017 р. 02:53

      Делайте, пожалуйста, отступы между символами > < && || и остальным текстом кода, всё сливается, читать невозможно. Как никак код стайл придумали не на пустом месте.

      Что касается Дебага, то скорее всего падает также из-за доступа к неинициализированной области памяти. В вашем примере кода не вижу ничего криминального. Нужно в режиме отладки ловить место падения и смотреть по информации, где может быть что-то битое.
        Docent
        • 15 січня 2020 р. 09:01
        • (відредаговано)

        Тут уже наверное поздно, но если кто еще столкнётся с этой проблемой - надо резервировать память под ваши вектора.

        QVector<double> X,Y;
        X.reserve(bigSize);
        X.resize(bigSize);
        Y.reserve(bigSize);
        Y.resize(bigSize);
        

          Коментарі

          Only authorized users can post comments.
          Please, Log in or Sign up
          d
          • dsfs
          • 26 квітня 2024 р. 04:56

          C++ - Тест 004. Указатели, Массивы и Циклы

          • Результат:80бали,
          • Рейтинг балів4
          d
          • dsfs
          • 26 квітня 2024 р. 04:45

          C++ - Тест 002. Константы

          • Результат:50бали,
          • Рейтинг балів-4
          d
          • dsfs
          • 26 квітня 2024 р. 04:35

          C++ - Тест 001. Первая программа и типы данных

          • Результат:73бали,
          • Рейтинг балів1
          Останні коментарі
          k
          kmssr08 лютого 2024 р. 18:43
          Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
          АК
          Анатолий Кононенко05 лютого 2024 р. 01:50
          Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
          EVA
          EVA25 грудня 2023 р. 10:30
          Boost - статичне зв&#39;язування в проекті CMake під Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
          J
          JonnyJo25 грудня 2023 р. 08:38
          Boost - статичне зв&#39;язування в проекті CMake під Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
          G
          Gvozdik18 грудня 2023 р. 21:01
          Qt/C++ - Урок 056. Підключення бібліотеки Boost в Qt для компіляторів MinGW і MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
          Тепер обговоріть на форумі
          IscanderChe
          IscanderChe30 квітня 2024 р. 04:22
          Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…
          G
          Gar22 квітня 2024 р. 05:46
          Clipboard Как скопировать окно целиком в clipb?
          DA
          Dr Gangil Academics20 квітня 2024 р. 07:45
          Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
          a
          a_vlasov14 квітня 2024 р. 06:41
          Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
          Павел Дорофеев
          Павел Дорофеев14 квітня 2024 р. 02:35
          QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь

          Слідкуйте за нами в соціальних мережах