Здравствуйте, гость ( Вход | Регистрация )
Алексей1153 | Дата 5.2.2013, 18:32 |
demaker, не должно быть таких преобразований. Что-то не так делаешь | |
demaker | Дата 5.2.2013, 15:09 |
Понятно. Ну в item должен быть указатель на plot за этим я и создал TreeWidgetitem от QTreeWidgetitem но сигнал itemDoubleClicked(QTreeWidgetItem*,int) передает только QTreeWidgetItem*, поэтому приходится делать явное преобразование типов ((TreeWidgetItem*)item)->p lanz, Алексей1153 огромное спасибо ВАМ!!! |
|
Алексей1153 | Дата 5.2.2013, 14:39 |
вот это
должно выглядеть так (в первом приближении)
|
|
demaker | Дата 5.2.2013, 14:27 |
Понятно, спасибо. Но у меня вроде так и есть: деструктор:
одиночное удаление:
и создание:
Не могу понять что нето. Спасибо. Попробую заново переписать. |
|
Алексей1153 | Дата 5.2.2013, 14:26 |
ну, или std::vector / std::map (лично я кутешные контейнеры стараюсь не использовать, если только никак без этого) тогда такие забывания просто не существуют |
|
lanz | Дата 5.2.2013, 14:22 |
Так, а ларчик просто открывался Все падает в ~CCOMTRADE, когда удаляются неинициализированные
Лечится добавлением в конструктор
Но вообще Алексей1153 дело говорит. И еще поменьше new/delete, а вместо них побольше QVector-ов. |
|
Алексей1153 | Дата 5.2.2013, 14:07 |
как удалить - это зависит от того, как добавлял. К примеру, ты в какой-то момент времени создаёшь на куче через new и добавляешь к плоттеру (теперь плоттер САМ заботится об удалении графика - в деструкторе это произойдёт) . Если ты извлёк график (навроде removeitem) , то плоттер уже не заботится о его судьбе. Ты можешь сразу после извлечения удалить память графика при помощи delete - так как сам он не удалится. Но это просто утечка памяти, а не выпадение Придерживайся правила - где создал объект, там и удаляй. В одном классе. В двух методах одного класса (create/delete). В одном методе (на стеке, к примеру) . В одном потоке. Не надо делать так - в одном потоке создал, в другом удалил. В одном процессе. Это желательно Так меньше ошибок |
|
demaker | Дата 5.2.2013, 14:03 |
нужно: 1) решить, какой класс управляет данными в массиве (в частности - в мапе, в списке) 2) инкапсулировать массив в этот класс с доступом private 3) сделать методы Clear(), DeleteItem(), .... , AddItem(), FindItem(), ... 4) из конструктора класса вызвать Clear() и не мучать себя и остальных и, естественно, никаких deleteLater ок -> понял И еще такой вопрос по поводу deleteLater. Как мне удалить график, который я добавил на виджет? Чуть подробнее можно. |
|
Алексей1153 | Дата 5.2.2013, 13:48 |
нужно: 1) решить, какой класс управляет данными в массиве (в частности - в мапе, в списке) 2) инкапсулировать массив в этот класс с доступом private 3) сделать методы Clear(), DeleteItem(), .... , AddItem(), FindItem(), ... 4) из конструктора класса вызвать Clear() и не мучать себя и остальных и, естественно, никаких deleteLater |
|
demaker | Дата 5.2.2013, 13:41 |
Не, все так же | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 3:03 |