М
МишаNov. 30, 2017, 2:22 a.m.

QCustomPlot исчезает часть графика при перестроении

Здравствуйте.

Построил график на основе http://www.qcustomplot.com/index.php/demos/financialchartsdemo
При перестроении графика очищается окно методом clearPlottables();
При следующем построении volumeAxisRect остается пустым, не строится. Скажите пожалуйста, почему и как это исправить?
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

9
Evgenii Legotckoi
  • Dec. 3, 2017, 4:07 p.m.
День добрый.
Нужно проверить указатель на volumeAxisRect . Вполне возможно, что он вообще там nullptr после выполнения этого метода.
И нужно заново пересоздавать его. А также заполнять данными заново.
    М
    • Dec. 4, 2017, 1:41 a.m.

    Проверил так

    QCPAxisRect *volumeAxisRect = new QCPAxisRect(ui->customPlot);
        qDebug()<<"volumeAxisRect"<<volumeAxisRect;
    Выдает так:

    volumeAxisRect QCPAxisRect(0x1dd3c620)

    bool QCPLayoutGrid::addElement(int, int, QCPLayoutElement*) There is already an element in the specified row/column: 1 0

    Может нужно как то иначе очистить полотно?

      Evgenii Legotckoi
      • Dec. 4, 2017, 3:01 a.m.

      Значит нужно его заново нормально переинициализировать переменными и т.д.

        М
        • Dec. 4, 2017, 3:15 a.m.

        Он проинициализирован так.

        QCPAxisRect *volumeAxisRect = new QCPAxisRect(ui->customPlot);

        Описан так:

            ui->customPlot->plotLayout()->addElement(1, 0, volumeAxisRect); //добавить элимент
            volumeAxisRect->setMaximumSize(QSize(QWIDGETSIZE_MAX, 100));//макс размер макета
            volumeAxisRect->axis(QCPAxis::atBottom)->setLayer("axes");  //добавить слой
            volumeAxisRect->axis(QCPAxis::atBottom)->grid()->setLayer("grid");  //сетка
            //принесите нижней и главной оси прямоугольник ближе друг к другу: // bring bottom and main axis rect closer together:
            ui->customPlot->plotLayout()->setRowSpacing(0);
            volumeAxisRect->setAutoMargins(QCP::msLeft|QCP::msRight|QCP::msBottom);
            volumeAxisRect->setMargins(QMargins(0, 0, 0, 0));
            //создать две планки для положительных (зеленых) и отрицательных (красных) объемных баров: // create two bar plottables, for positive (green) and negative (red) volume bars:
            ui->customPlot->setAutoAddPlottableToLegend(false);
            QCPBars *volumePos = new QCPBars(volumeAxisRect->axis(QCPAxis::atBottom), volumeAxisRect->axis(QCPAxis::atLeft));
            QCPBars *volumeNeg = new QCPBars(volumeAxisRect->axis(QCPAxis::atBottom), volumeAxisRect->axis(QCPAxis::atLeft));
            //volumePos->setData(bar,Volume);
        
            for (long long i=0; i<NBar; i++)
            {
                (Open[i] > Close[i] ? volumeNeg : volumePos)->addData(bar[i], Volume[i]);
            }
            volumePos->setData(bar, Volume); // задает значения объемов
            volumePos->setWidth(VolumeWidth);//ширина столбика
            volumePos->setPen(Qt::NoPen);
            volumePos->setBrush(QColor(100, 180, 110));
            volumeNeg->setWidth(VolumeWidth);//ширина столбика
            volumeNeg->setPen(Qt::NoPen);
            volumeNeg->setBrush(QColor(180, 90, 90));
        Скажите пожалуйста что плохо сделано и что нужно заменить?
          Evgenii Legotckoi
          • Dec. 4, 2017, 4:01 p.m.

          тут дебажить нужно, что у вас там не работает. или что там игнорируется.

            М
            • Dec. 5, 2017, 2:19 a.m.

            Запустил с дебагом, ошибок не выдает.

            При первой прорисовке графика, нижний график(график объемов) рисуется, при перестроении графика, с верхним все в порядке, нижний пустой. Пробовал
              for (long long i=0; i<NBar; i++)
                {
                    (Open[i] > Close[i] ? volumeNeg : volumePos)->addData(bar[i], Volume[i]);
                }
            заменить
            volumePos->setData(bar,Volume);
            но все равно эта непрорисовка оставалась.
            Потому и надеялся что можно стереть всю информацию с виджета, это бы наверно решило вопрос.
              М
              • Dec. 11, 2017, 2:50 a.m.

              Говорят такой сбой получатся из-за добавления элементов макета при последующих использованиях.  Видимо при первом запуске нужно создать элементы макета, а при последующих их заполнять.

              Скажите пожалуйста, как создать макет только 1-й раз, а последующие разы к нему обращаться?
              Если делаю так
              if (FirstPaintingGraph==true) {QCPAxisRect *volumeAxisRect = new QCPAxisRect(ui->customPlot);}
              то volumeAxisRect не виден за пределами {}.
                Evgenii Legotckoi
                • Dec. 11, 2017, 3:09 a.m.

                Объявить volumeAxisRect в заголовочном файле

                  М
                  • Dec. 11, 2017, 7:32 a.m.

                  Заработало, спасибо

                    Comments

                    Only authorized users can post comments.
                    Please, Log in or Sign up
                    AD

                    C ++ - Test 004. Pointers, Arrays and Loops

                    • Result:50points,
                    • Rating points-4
                    m

                    C ++ - Test 004. Pointers, Arrays and Loops

                    • Result:80points,
                    • Rating points4
                    m

                    C ++ - Test 004. Pointers, Arrays and Loops

                    • Result:20points,
                    • Rating points-10
                    Last comments
                    Evgenii Legotckoi
                    Evgenii LegotckoiNov. 1, 2024, 12:37 a.m.
                    Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                    A
                    ALO1ZEOct. 19, 2024, 6:19 p.m.
                    Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                    ИМ
                    Игорь МаксимовOct. 5, 2024, 5:51 p.m.
                    Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                    d
                    dblas5July 5, 2024, 9:02 p.m.
                    QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                    k
                    kmssrFeb. 9, 2024, 5:43 a.m.
                    Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                    Now discuss on the forum
                    Evgenii Legotckoi
                    Evgenii LegotckoiJune 25, 2024, 1:11 a.m.
                    добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                    t
                    tonypeachey1Nov. 15, 2024, 5:04 p.m.
                    google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                    NSProject
                    NSProjectJune 4, 2022, 1:49 p.m.
                    Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                    9
                    9AnonimOct. 25, 2024, 7:10 p.m.
                    Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                    Follow us in social networks