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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Установка камеры сцены (QGraphicsView)  (Прочитано 3290 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Сентябрь 13, 2016, 15:48 »

Как переместить камеру, чтобы элемент при повороте было видно полностью и его положение относительно левой и верхней стенки сцены были как на первом скрине?

Поворачиваю так:
Код
C++ (Qt)
   // Поворот всей карты
   QPointF center = card->boundingRect().center();
   QTransform transform;
 
   if (checked) {
       transform.translate(center.x(), center.y())
                .rotate(-90)
                .translate(-center.x(), -center.y());
 
   } else {
       transform.translate(center.x(), center.y())
                .rotate(90)
                .translate(-center.x(), -center.y());
   }
   card->setTransform(transform, true);
 

Вью настраиваю так:
Код
C++ (Qt)
   qreal size = std::max(card->boundingRect().width(), card->boundingRect().height());
   ui->graphicsView->setSceneRect(QRectF(-10, -10, size, size));
 
   ui->graphicsView->setAlignment(Qt::AlignTop | Qt::AlignLeft);
 

Спасибо.
« Последнее редактирование: Сентябрь 14, 2016, 09:42 от gil9red » Записан

__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Сентябрь 13, 2016, 19:23 »

Не работал с этими классами, но из опыта OpenGL могу предложить вращать вокруг topLeft и транслировать вниз на ширину банковской карты
Это будет примерно так:
Код:
transform.rotate(-90).translate(0, card->boundingRect().width());
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Сентябрь 13, 2016, 19:39 »

Упс, вопрос не до конца прочитал
Код
C++ (Qt)
if (checked) {
   transform.rotate(-90).translate(0, card->boundingRect().width());
}
else{
   transform.rotate(90).translate(card->boundingRect().height, card->boundingRect().width());
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Сентябрь 13, 2016, 20:54 »

Ничего Улыбающийся Я под конец рабочего дня смог настроить, но было уже лениво выкладывать Улыбающийся
Завтра выложу решение, хотя сам не знаю как получилось и почему Веселый
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Сентябрь 14, 2016, 08:44 »

Как-то получилось, сам не понял почему Смеющийся

При создании сцены задаем настройки:
Код
C++ (Qt)
 
   ui->graphicsView->setAlignment(Qt::AlignTop | Qt::AlignLeft);
 
И вызываем этот код:

Код
C++ (Qt)
   QPolygonF polygonF = card->mapToScene(card->boundingRect());
   qreal x = -10 + polygonF.first().x();
   qreal y = -10 - polygonF.first().x();
   qreal width = card->boundingRect().width();
   qreal height = card->boundingRect().height();
   ui->graphicsView->setSceneRect(QRectF(x, y, width, height));
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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