crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Рисование линий и память, QGraphicsScene и QLine
RazrFalcon
  опции профиля:
сообщение 7.7.2011, 18:14
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Рисую линии(график) так:
//в хедере
QList<QLineF> linesList;

//затем
linesList.append(QLineF(x1,y1,x2,y2));
scene->addLine(linesList.at(lineNumber),pen);
lineNumber++;
Или:
//в хедере
QList<QLineF*> *linesList;

// в конструкторе mainwindow
linesList = new QList<QLineF*>;
//затем
linesList.append(new QLineF(x1,y1,x2,y2));
scene->addLine(linesList.at(lineNumber),pen);
lineNumber++;

В обоих случаях утечка памяти. Рисуется по линии каждые 100мс. За 10 мин отжирает метров 10-20. Как исправить?
Точнее, как сделать так, что бы избавится от утечки памяти. При том, что мне, наверное, нужно хранить QList линий, что бы потом находит высоту в нужной точке графика посредством:
IntersectType QLineF::intersect ( const QLineF & line, QPointF * intersectionPoint ) const

Делаю это так:
QLineF *line1 = new QLineF(linesList->at(pos)->x1(), linesList->at(pos)->y1(),
                           linesList->at(pos)->x2(), linesList->at(pos)->y2());
QLineF line2(vLine->x(), 0, vLine->x(), scene->height());
QPointF intersectionPoint;
line1->intersect(line2, &intersectionPoint);
qDebug()<<intersectionPoint.y();


Уверен что есть более правильный способ.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.7.2011, 18:54
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(RazrFalcon @ 7.7.2011, 21:14) *
Точнее, как сделать так, что бы избавится от утечки памяти.
а почему ты решил, что есть утечка?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 7.7.2011, 19:01
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


оператором new память из кучи выделал. А кто будет обратно в кучу вертать (delete) ?

А вообще, тут тебе нужен контейнер типа

QList<QLineF>

Сообщение отредактировал Алексей1153 - 7.7.2011, 19:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 7.7.2011, 19:20
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Цитата(Litkevich Yuriy @ 7.7.2011, 18:54) *
Цитата(RazrFalcon @ 7.7.2011, 21:14) *
Точнее, как сделать так, что бы избавится от утечки памяти.
а почему ты решил, что есть утечка?

Через 10 мин съело 20 метров. Прога будет работать круглосуточно, и графиков будет 8-м...


Цитата
А вообще, тут тебе нужен контейнер типа
QList<QLineF>

Самый первый код первого сообщения...
Та же беда.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 7.7.2011, 19:28
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ладно. Тогда так:

linesList.append(QLineF(x1,y1,x2,y2));

а где очистка ? всегда только наполнение :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 7.7.2011, 20:11
Сообщение #6


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


<_<
Какая очистка?
Мне же нужен "лист"...
Или вы имеете ввиду "QLineF(x1,y1,x2,y2)", тогда я не знаю как его удалить =/
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.7.2011, 20:31
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(RazrFalcon @ 7.7.2011, 22:20) *
Через 10 мин съело 20 метров.
ну и что, ты в коде нигде линии не удаляешь, только добавляешь и всё.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 7.7.2011, 21:26
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


RazrFalcon, выведи в консоль значение linesList.size() и понаблюдай
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mks
  опции профиля:
сообщение 7.7.2011, 21:39
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 23.12.2010
Пользователь №: 2295

Спасибо сказали: 1 раз(а)




Репутация:   0  


RazrFalcon ты по всей видимости отслеживаеш какой то длительный процесс и строишь его график. Твоя программа должна накапливать длительную статистику этого процесса (несколько суток или месяцев). Если я всё правильно понял, тогда в памяти в виде линий надо сохранять небольшой кусок этого графика, при поступлении новых данных старые удалять (можно сохранять на жёсткий диск) а новые добавлять, работать скользящим окном.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 7.7.2011, 23:27
Сообщение #10


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Да, я тоже думал про "скользящее окно", просто реализация будет по сложнее.
Но данные то все равно хранятся в БД, так что должно быть норм.

Цитата
выведи в консоль значение linesList.size() и понаблюдай
Угу, уже понял свою "ошибку".
Так как прога будет обновлять значения не чаще чем раз в пару секунд, а не каждые 100мс как сейчас, то думаю проблем не будет.

Сообщение отредактировал RazrFalcon - 7.7.2011, 23:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 15:39