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

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

Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: Рисование в QGraphicScene  (Прочитано 23252 раз)
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #45 : Март 17, 2011, 15:26 »

Цитировать
так что, радар обязательно делать отдельным итемом?
Почему Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
deaks
Гость
« Ответ #46 : Март 17, 2011, 15:32 »

то есть чтобы окружность всегда рисовалась в центре виджета, надо делать так -
Код
C++ (Qt)
void TargetsView::drawBackground(QPainter *painter, const QRectF &rect)
{
   QPointF center(sceneRect().width() / 2, sceneRect().height() / 2);
   painter->drawEllipse(center, 90, 90);
}
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #47 : Март 17, 2011, 15:53 »

Цитировать
то есть чтобы окружность всегда рисовалась в центре виджета, надо делать так -
Не так, а вот так:
Код
C++ (Qt)
void TargetsView::drawBackground(QPainter *painter, const QRectF &rect)
{
   painter->drawEllipse(QPointF( 0, 0 ), -45, -45);
}

Ещё раз читай мой предпоследний пост.
А вообще ассистент рулит)
« Последнее редактирование: Март 17, 2011, 15:59 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
deaks
Гость
« Ответ #48 : Март 17, 2011, 16:12 »

а понял))
то есть пейнтер надо инициализировать (->translate)координатой центра сцены во время каждого вызова метода ->drawBackground.

Все хорошо. вижу что на 1ом шаге появляется правильная картинка, но затем ничего не рисуется((
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #49 : Март 17, 2011, 16:15 »

Цитировать
а понял))
то есть пейнтер надо инициализировать (->translate)координатой центра сцены во время каждого вызова метода ->drawBackground.
Ничего ты не понял(
Читай ещё раз:
Цитировать
Painter в drawBackground() уже перемещён в начальную координату. Это нужно учитывать, т.к. вся отрисовка делается относительно позиции painter-a.
В твоём случае позиция будет QPointF( sceneRect().width() / 2, sceneRect().height() / 2 )
т.е. "курсор" painter-a уже стоит в центре.
Записан

Qt 5.11/4.8.7 (X11/Win)
deaks
Гость
« Ответ #50 : Март 17, 2011, 16:35 »

не понимаю  В замешательстве я в замешательстве

я ведь сам не вызываю drawBackground, как тогда задать эту позицию, про которую вы говорите Грустный((



« Последнее редактирование: Март 17, 2011, 16:37 от deaks » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #51 : Март 17, 2011, 16:40 »

Цитировать
я ведь сам напрямую не вызываю drawBackground, как тогда задать эту позицию, про которую вы говорите
Да не надо ничего задавать. Painter уже стоит в центре. Все координаты должны быть относительные.
Ты что, вообще не читаешь, что тебе пишут Непонимающий
Для кого я писал сей код?
Код
C++ (Qt)
void TargetsView::drawBackground(QPainter *painter, const QRectF &rect)
{
   painter->drawEllipse(QPointF( 0, 0 ), -45, -45);
}
Записан

Qt 5.11/4.8.7 (X11/Win)
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #52 : Март 17, 2011, 16:42 »

Ещё раз внимательно перечитай нашу переписку.
Записан

Qt 5.11/4.8.7 (X11/Win)
deaks
Гость
« Ответ #53 : Март 17, 2011, 16:56 »

видимо я не до конца принимаю принципа painter'a(связь между логическими и физическими координатами). буду разбираться)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #54 : Март 17, 2011, 17:02 »

Ещё раз.
Установив начало координат сцены в центре, ты сдвинул логические координаты пайнтера в центр.
А пайнтер при отрисовке использует именно логические координаты.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: 1 2 3 [4]   Вверх
  Печать  
 
Перейти в:  


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