Guka
Гость
|
|
« : Февраль 04, 2010, 11:04 » |
|
Здравствуйте коллеги! Есть задача создать графический редактор с набором примитивов. Одним из примитивов является ломаная линия. Минимальный функционал: редактирование по точкам, удаление произвольной точки, добавление точки в произвольное место (в конец, в начало, в середину).
Мое решение: В качестве базового класса для объекта ломаная линия использую класс QCanvasPolygonalItem и QObject для того чтобы можно было обмениваться сообщениями (signal/slot). Переопределил метод areaPoints() для определения массива точек ограничивающих линию. Класс линии содержит массив объектов "угловая точка"
В качестве угловой точки используется класс унаследованный от QCanvasPolygonalItem и QObject. Для объекта "угловая точка" переопределил метод moveBy() и из него посылаю сигнал для объекта "ломаная линия" об изменении координаты текущей точки.
Во всех функциях класса "Ломаная линия" где происходит изменение/добавление/удаление точек использую функции invalidate() и update(). На канвасе все отображается нормально, но после удаления объекта "Ломаная линия" программа разваливается после вызова Qcanvas->update(). В деструкторе "линии" вызывается hide(), так что проблемма не в этом.
Мое предположение, что при изменении положения точек перерасчитывается ограничивающся область в areaPoints() и как будто у QCanvas остаются какие-то следы, тоесть объекта "ломаной линии" у QCanvas уже нет, но область где он был остается как бы помеченой, что ли и при перересовке онна неё натывается.
Вот хотелось бы узнать ваше мнение насчет моего решения для реализаци поставленной задачи, и насчет ситуации с развалом QCanvas. Может у кого то были подобные косяки.
версия QT: 3.3.2 - древность, но нет другой возможности. ОС : WinXP SP 2
|