Russian Qt Forum
Сентябрь 29, 2024, 22:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: создание оъекта "ломаная линия" средствами QCanvas  (Прочитано 3607 раз)
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
« Последнее редактирование: Февраль 04, 2010, 11:06 от Guka » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.04 секунд. Запросов: 20.