Russian Qt Forum

Qt => Вопросы новичков => Тема начата: alammer от Октябрь 29, 2014, 11:56



Название: QPainter, QTransform и координаты
Отправлено: 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); ), но  в хелпе ничего на эту тему не нашел. Чего я не понимаю?


Название: Re: QPainter, QTransform и координаты
Отправлено: gil9red от Октябрь 29, 2014, 12:31
Для рисования кружков, окружностей и т.п. у QPainter'а есть замечательный метод drawEllipse().


Название: Re: QPainter, QTransform и координаты
Отправлено: vulko от Октябрь 29, 2014, 12:46
Не нужно портить матрицу.
Используй

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

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


П.С. Почитай про QGraphicsScene и QGraphicsItem, возможно с ними будет куда проще.