М
Миша12 декабря 2017 г. 6: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 г. 2: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 г. 2:53

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

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

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

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

          Комментарии

          Только авторизованные пользователи могут публиковать комментарии.
          Пожалуйста, авторизуйтесь или зарегистрируйтесь
          AD

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

          • Результат:50баллов,
          • Очки рейтинга-4
          m
          • molni99
          • 26 октября 2024 г. 11:37

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

          • Результат:80баллов,
          • Очки рейтинга4
          m
          • molni99
          • 26 октября 2024 г. 11:29

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

          • Результат:20баллов,
          • Очки рейтинга-10
          Последние комментарии
          i
          innorwall12 ноября 2024 г. 9:12
          Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
          i
          innorwall12 ноября 2024 г. 5:23
          QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
          i
          innorwall12 ноября 2024 г. 2:50
          Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
          i
          innorwall12 ноября 2024 г. 1:19
          Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
          i
          innorwall12 ноября 2024 г. 0:55
          PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
          Сейчас обсуждают на форуме
          i
          innorwall12 ноября 2024 г. 7:56
          добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
          i
          innorwall11 ноября 2024 г. 21:55
          Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
          9
          9Anonim25 октября 2024 г. 19:10
          Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
          ИМ
          Игорь Максимов3 октября 2024 г. 14:05
          Реализация навигации по разделам Спасибо Евгений!

          Следите за нами в социальных сетях