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