М
Миша30 листопада 2017 р. 02:22

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

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

Построил график на основе http://www.qcustomplot.com/index.php/demos/financialchartsdemo
При перестроении графика очищается окно методом clearPlottables();
При следующем построении volumeAxisRect остается пустым, не строится. Скажите пожалуйста, почему и как это исправить?
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

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

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

    Проверил так

    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
      • 04 грудня 2017 р. 03:01

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

        М
        • 04 грудня 2017 р. 03:15

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

        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
          • 04 грудня 2017 р. 16:01

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

            М
            • 05 грудня 2017 р. 02:19

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

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

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

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

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

                  М
                  • 11 грудня 2017 р. 07:32

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

                    Коментарі

                    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 с многорядностью проект поддерживается, обращайтесь

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