Russian Qt Forum
Ноябрь 22, 2024, 07:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с qwtplotmarker  (Прочитано 6821 раз)
dimbor
Гость
« : Август 16, 2017, 14:50 »

Доброго времени суток.

Писал программу, выводяющую векторную диаграмму на график. При создании векторной диаграммы использовал массив qwtplotmarker'ов:
Код:
QwtPlotMarker markers_array[1024];

На графике все 1024 точки отображаются прекрасно. Но возникает проблема при закрытии программы - постоянно вылетает ошибка памяти, как будто  все указатели на маркеры теряются и он не может их удалить. Да и когда я пытаюсь сделать detach, никакой реакции не происходит. Собственно вопрос - каким образом нужно правильно удалять весь массив маркеров?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Август 16, 2017, 16:20 »

Интересно, а если закрывать программу через qApp->quit() (главное не забыть #include <QApplication>) ошибка тоже будет? Веселый
Записан

__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Август 16, 2017, 16:36 »

Вызов delete с передачей указателя на QwtPlotMarker в деструкторе QwtPlot
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Август 16, 2017, 16:47 »

Предлагаю в деструкторе QwtPlot наследника вызывать detachItems (QwtPlotItem::Rtti_PlotMarker, false);
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Август 16, 2017, 16:50 »

Ещё можно перед вызовом ~QwtPlot() пробежаться по массиву маркеров и для каждого вызвать detach. Имхо, так даже правильнее будет.
Записан
dimbor
Гость
« Ответ #5 : Август 16, 2017, 17:06 »

Ещё можно перед вызовом ~QwtPlot() пробежаться по массиву маркеров и для каждого вызвать detach. Имхо, так даже правильнее будет.

В деструкторе плота? Для этого, получается, надо переопределять весь график? Или как-то можно до него добраться, если он в дизайнере объявлен?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Август 17, 2017, 09:08 »

В деструкторе класса, который хранит markers_array[1024];

Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #7 : Август 17, 2017, 09:10 »

Есть ещё вариант создавать экземпляры в динамической памяти с помощью оператора new. Тогда ответственность за освобождение памяти будет у QwtPlot при связывании маркеров с ним.
Записан
dimbor
Гость
« Ответ #8 : Август 17, 2017, 16:39 »

К сожалению, описанные способы не помогли. Ошибка каждый раз вылетает в этом месте:
Код:
    ~PrivateData()
    {
#ifndef QWT_NO_SVG
        delete svg.renderer;
#endif
    }

Перепробовал все, включая и создание при помощи new. Ошибка продолжает упорно действовать на нервы.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #9 : Август 17, 2017, 21:28 »

Выложите минимальный компилябельный проект
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.