Преобразование Qt GraphicsItem влияет на все элементы в сцене

У меня есть это встроенное приложение Qt, которое использует каркас QGraphics для отображения веб-представления.
Размеры веб-вида составляют 1280 * 720 пикселей, а QGraphicsView настроен для визуализации сцены в этих координатах (0,0, 1280×720).

Я пытаюсь добавить индикатор загрузки в верхнем правом углу (на 1100,50), который представляет собой простое изображение в формате PNG, которое я поворачиваю время от времени, используя QTimeLine.

Код выглядит так (я нашел трюк с преобразованием в интернете):

// loading_indic initialization:
QGraphicsPixmapItem *loading_indic =
new QGraphicsPixmapItem( QPixmap("./resources/loading_64.png") );
loading_indic->setPos(QPoint(1100.0,50.0));

QTimeLine timeline = new QTimeLine(1000);
timeline->setFrameRange(0,steps);
connect(timeline, SIGNAL(valueChanged(qreal)), this, SLOT(updateStep(qreal)));
timeline->start();

// called at each step of a QTimeLine:
void updateStep(qreal step) {
QTransform transformation = QTransform()
// place coordinate system to the center of the image
.translate(  width/2.0,  height/2.0)
// rotate the image in this new coordinate system
.rotate(new_angle)
// replace the coordinate system to the original
.translate( -width/2.0, -height/2.0);

loading_indic->setTransform(transformation);
}

Теперь моя проблема в том, что при этом похоже, что WebView также переводится, в результате чего все отображается в центре экрана.

Результат выглядит так:

проблема

Предполагается, что веб-просмотр заполняет экран, а индикатор загрузки должен быть в правом верхнем углу …

Моя сцена содержит только два элемента:

Scene
|
\____ QGraphicsWebView
\____ QGraphicsPixmapItem // loading indicator

Что я здесь не так делаю?

-1

Решение

Решил мою проблему ..
Я не знаю почему, но похоже, что добавление этого элемента PNG в сцену испортило прямоугольник сцены.

Делая это:

_scene.addItem(loading_indic);
loading_indic->setPos(1100.0, 50.0);
_scene.setSceneRect(0.0,0.0,1280.0,720.0); // resets the scene's rectangle ?!
loading_indic->startAnimation();

решил проблему. Теперь мои предметы правильно размещены на экране.

Если у кого-то есть объяснение этому, я с радостью приму его ответ.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector