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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPainter, QTransform и координаты  (Прочитано 2723 раз)
alammer
Гость
« : Октябрь 29, 2014, 11:56 »

Здравствуйте! Объясните один момент:)

Qt 4.8.1, Ubuntu 12.04
Мне надо нарисовать X кружков, а потом соединить их линиями по некоторму алгоритму. Для рисования окружностей я использую painter.rotate().  А для того, чтобы потом иметь их координаты в общей системе влепил костыль на QTransform. Про QTransform прочитал вскользь в хелпах. Костыль внезапно заработал почти с 1 раза, но я теперь не понимаю как:) Вот кусок кода:

           
Код:
QPainter painter(this);

            painter.translate(wid / 2, hei / 2);  // переместились в центр окна

            recsize = 10;//tplist[ap0].remac.size();  //количество кружков

            rot = 360 / recsize;

            painter.save();

            for (int i = 0; i < recsize; i++)
            {
               
                if (i > 0)painter.rotate(rot);

                br.setColor(Qt::green);
                painter.setPen(Qt::NoPen);
                painter.setBrush(br);
                cent = QPoint::QPoint(0, -hei*0.375);  //центр окружности в тек. координатах (после rotate())
                painter.drawEllipse(cent, hei/30, hei/30);

                QTransform mytrans;             
                mytrans.rotate(rot*i);
                QPoint trpp = QPoint::QPoint(0,-hei*0.375);    //это координаты центра текущей окружности в текущих координатах
                QPoint trpOLD = mytrans.map(trpp);    // в trpOLD оказывается  тот же самый центр но уже в начальных координатах !!!       
            }

получается, что QTransform::map() преобразовывает текущие коор-ты матрицы сразу в начальные коор-ты (т.е. в систему с центром painter.translate(wid / 2, hei / 2); ), но  в хелпе ничего на эту тему не нашел. Чего я не понимаю?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Октябрь 29, 2014, 12:31 »

Для рисования кружков, окружностей и т.п. у QPainter'а есть замечательный метод drawEllipse().
Записан

vulko
Гость
« Ответ #2 : Октябрь 29, 2014, 12:46 »

Не нужно портить матрицу.
Используй

painter.save()
//опасный код! =)
painter.restore()

когда применяешь трансформации к канве.


П.С. Почитай про QGraphicsScene и QGraphicsItem, возможно с ними будет куда проще.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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