Название: Работа с Qt Painter Отправлено: AndeRVRN от Сентябрь 28, 2015, 23:52 Задача такая: имитировать движение секундной стрелки.
Ну я планирую сделать это так, рисовать стрелку в её исходном положении, потом стирать её и рисовать уже сдвинутую на 6 градусов по часовой стрелке. Ну с помощью paintEvent нарисовал линию, теперь возник вопрос, а как стереть её? В смысле как снова вызвать paintEvent уже с другим Pen(с цветом фона) чтобы просто поверх этой линии нарисовать еще одну, с цветом фона. Пробовал создать свою функцию и вставить туда этот код, он не работал. Работает только в paintEvent. А как его вызывать еще раз, после запуска программы, не пойму... подскажите. Код: void Dialog::paintEvent(QPaintEvent *) Название: Re: Работа с Qt Painter Отправлено: Racheengel от Сентябрь 29, 2015, 00:00 Просто закрашивайте фон в самом начале Dialog::paintEvent, перед тем как рисовать стрелки.
Для отрисовки по времени надо юзать QTimer. Название: Re: Работа с Qt Painter Отправлено: AndeRVRN от Сентябрь 29, 2015, 00:07 Просто закрашивайте фон в самом начале Dialog::paintEvent, перед тем как рисовать стрелки. 1. А как можно закрасить фон? Функцию такую я не нашел и поэтому сделал альтернативу, просто создал прямоугольник формой окна и залил его нужным цветом. Для отрисовки по времени надо юзать QTimer. 2. Как вызвать paintEvent из таймера? Т.е. как обратиться к нему из другой функции? Название: Re: Работа с Qt Painter Отправлено: AndeRVRN от Сентябрь 29, 2015, 00:32 Просто закрашивайте фон в самом начале Dialog::paintEvent, перед тем как рисовать стрелки. 1. А как можно закрасить фон? Функцию такую я не нашел и поэтому сделал альтернативу, просто создал прямоугольник формой окна и залил его нужным цветом. Для отрисовки по времени надо юзать QTimer. 2. Как вызвать paintEvent из таймера? Т.е. как обратиться к нему из другой функции? 2-ой вопрос решил. P.S. Не подскажите еще, как можно высчитать координаты поворота секундной стрелки на 6 градусов? Название: Re: Работа с Qt Painter Отправлено: Racheengel от Сентябрь 29, 2015, 00:49 1. QPainter::fillRect()
2. Напрямую никак, надо в слоте по таймеру вызывать repaint() для вашего виджета. 3. Можно использовать трансформацию координат, напрмер void QPainter::rotate(qreal angle) Название: Re: Работа с Qt Painter Отправлено: AndeRVRN от Сентябрь 29, 2015, 00:59 1. QPainter::fillRect() 2. Напрямую никак, надо в слоте по таймеру вызывать repaint() для вашего виджета. 3. Можно использовать трансформацию координат, напрмер void QPainter::rotate(qreal angle) Насчет поворота координатной плоскости, пробовал. Поворачивается относительно левого верхнего угла. А мне нужно, чтобы поворачивалось относительно центра. Возможно ли это как-то организовать? Название: Re: Работа с Qt Painter Отправлено: AndeRVRN от Сентябрь 29, 2015, 01:50 1. QPainter::fillRect() 2. Напрямую никак, надо в слоте по таймеру вызывать repaint() для вашего виджета. 3. Можно использовать трансформацию координат, напрмер void QPainter::rotate(qreal angle) Насчет поворота координатной плоскости, пробовал. Поворачивается относительно левого верхнего угла. А мне нужно, чтобы поворачивалось относительно центра. Возможно ли это как-то организовать? Попробовал перенести координатную плоскость с помощью: Цитировать painter.translate(this->width() / 2, this->height() / 2); Но в центр перенеслась не сама координатная плоскость, а весь холст на котором рисую. То есть в принципе ничего не изменилось, просто на форме передвинулось. Название: Re: Работа с Qt Painter Отправлено: Igors от Сентябрь 29, 2015, 05:35 P.S. Не подскажите еще, как можно высчитать координаты поворота секундной стрелки на 6 градусов? Код А если угол (вместо curT) то переводите его в радианы и отнимаете PI/2 Название: Re: Работа с Qt Painter Отправлено: AndeRVRN от Сентябрь 29, 2015, 10:20 P.S. Не подскажите еще, как можно высчитать координаты поворота секундной стрелки на 6 градусов? Код А если угол (вместо curT) то переводите его в радианы и отнимаете PI/2 Большое спасибо. Заработали как часы :) |