Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: gil9red от Сентябрь 13, 2016, 15:48



Название: [РЕШЕНО] Установка камеры сцены (QGraphicsView)
Отправлено: gil9red от Сентябрь 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);
 

Спасибо.


Название: Re: Установка камеры сцены (QGraphicsView)
Отправлено: __Heaven__ от Сентябрь 13, 2016, 19:23
Не работал с этими классами, но из опыта OpenGL могу предложить вращать вокруг topLeft и транслировать вниз на ширину банковской карты
Это будет примерно так:
Код:
transform.rotate(-90).translate(0, card->boundingRect().width());


Название: Re: Установка камеры сцены (QGraphicsView)
Отправлено: __Heaven__ от Сентябрь 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());
}


Название: Re: Установка камеры сцены (QGraphicsView)
Отправлено: gil9red от Сентябрь 13, 2016, 20:54
Ничего :) Я под конец рабочего дня смог настроить, но было уже лениво выкладывать :)
Завтра выложу решение, хотя сам не знаю как получилось и почему :D


Название: Re: Установка камеры сцены (QGraphicsView)
Отправлено: gil9red от Сентябрь 14, 2016, 08:44
Как-то получилось, сам не понял почему ;D

При создании сцены задаем настройки:
Код
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));