Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Guka от Февраль 04, 2010, 11:04



Название: создание оъекта "ломаная линия" средствами QCanvas
Отправлено: 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