© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
30 ноября 2017 г. 7:22

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

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

Построил график на основе http://www.qcustomplot.com/index.php/demos/financialchartsdemo
При перестроении графика очищается окно методом clearPlottables();
При следующем построении volumeAxisRect остается пустым, не строится. Скажите пожалуйста, почему и как это исправить?
День добрый.
Нужно проверить указатель на volumeAxisRect . Вполне возможно, что он вообще там nullptr после выполнения этого метода.
И нужно заново пересоздавать его. А также заполнять данными заново.

Для Django рекомендую VDS-хостинг TIMEWEB

Проверил так

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

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

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

Для Django рекомендую VDS-хостинг TIMEWEB

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

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));
Скажите пожалуйста что плохо сделано и что нужно заменить?

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

Для Django рекомендую VDS-хостинг TIMEWEB

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

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

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

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

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

Для Django рекомендую VDS-хостинг TIMEWEB

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

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
15 октября 2018 г. 21:36
Allyans .

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

  • Результат 60баллов,
  • Очки рейтинга-1
15 октября 2018 г. 11:25
Екатерина Самойлова

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

  • Результат 33баллов,
  • Очки рейтинга-10
15 октября 2018 г. 11:17
Екатерина Самойлова

C++ - Тест 006. Перечисления

  • Результат 80баллов,
  • Очки рейтинга4
Последние комментарии
10 октября 2018 г. 9:50
Евгений Легоцкой

Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

Если и начинать писать о плагинах, то нужно тогда с Qt Creator начинать, там наверняка будет одинаковый принцип, но по Qt Creator хотя бы информация есть.
10 октября 2018 г. 9:48
ost.vld

Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

О плагинах к QtCreator в целом, тоже интересно.
10 октября 2018 г. 9:46
ost.vld

Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

ну типа того, создание программы, функционал которой можно расширять плагинами, и, в перспективе, создание API.
10 октября 2018 г. 8:31
Евгений Легоцкой

Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

Типо как в Qt Creator? Самому бы интересно было о таком почитать. В данный момент я бы мог написать только о написании плагинов для Qt Designer. С этим есть некоторый опыт.
Сейчас обсуждают на форуме
15 октября 2018 г. 12:45
Allyans .

QGraphicsItem change color

Хорошо)
11 октября 2018 г. 10:13
Arrow

Работа с WebView в QML

Нашел в чем проблема. Пишу на случай если кому-то попадется такое же счастье с WebView как и мне. Проблема как оказалась с Debug версией, так как в Release и Profile все работает (...
10 октября 2018 г. 12:49
Виталий Антипов

Кто что делает на Qt?

Работаем по локальной сети. Файл базы, схемы и фото лежат на сервере. Чтобы не было проблем при одновременной работе с одним файлом, все запросы обернул в транзакции, как указано в документаци...
10 октября 2018 г. 11:21
Arrow

Редактирование записи на форуме

Добрый день! К сожалению встретил небольшой баг на форуме. При создании записи на форуме и вставке кода, через соответствующую кнопку номера строк проставляются верно, но каждый...
10 октября 2018 г. 9:46
Arrow

Настройка Qt Creator для Android

Я Genymotion  ставил с VBox в комплекте для личного использования, после добавил из списка телефон с нужным API. Запустил его и при компиляции Qt Creator сам нашел его и все запустилось...
Присоединяйтесь к нам в социальных сетях