LINUX.ORG.RU

translate не работает

 ,


0

1

Есть мой класс, который наследован от QGrahicsView. В нем есть операции с матрицей отображения:

	offset.setX(offset.x() + 100);
	offset.setY(offset.y() + 50);
	qDebug() << "offset=" << offset;
	r += 0.5;

	QMatrix matrix;
	qDebug() << "m1=" << matrix;
	matrix.translate(offset.x(), offset.y());
	qDebug() << "m2=" << matrix;
	matrix.scale(current_scale, current_scale);
	matrix.rotate(r);
	this->setMatrix(matrix);
offset= QPoint(100,50)
m1= QMatrix(11=1 12=0 21=0 22=1 dx=0 dy=0)
m2= QMatrix(11=1 12=0 21=0 22=1 dx=100 dy=50)
offset= QPoint(200,100)
m1= QMatrix(11=1 12=0 21=0 22=1 dx=0 dy=0)
m2= QMatrix(11=1 12=0 21=0 22=1 dx=200 dy=100)

Проблема в том что вращение есть, масштабирование - есть тоже. А просто сместить картинку - не работает. ЧЯДНТ?

P.S. Конструктор:

	setInteractive(true);
//	setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
	setResizeAnchor(QGraphicsView::NoAnchor);
	setTransformationAnchor(QGraphicsView::NoAnchor);
	setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
	setOptimizationFlag(QGraphicsView::DontSavePainterState, true);
	setCacheMode(QGraphicsView::CacheBackground);
	setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing);

	current_scale = 1.0;

setTransformationAnchor(QGraphicsView::NoAnchor); - тоже не работает

Не срабатывает смещение не только при использовании матрицы, но и отдельного метода класса QGrahicsView.

В багтрекере Qt 5 описан этот баг, но суть workaround-а мне осталась не ясна. Почему такая элементарная базовая вещи работает не очевидно и не так как хотелось?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

centerOn - не работает

QTransform/setTransform - тоже не работает!

setAlignment(0) - без эффекта

setResizeAnchor(QGraphicsView::NoAnchor) - не работает

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)

В общем отстой, решил отказаться от QGraphicsView в пользу тупо paintEvent - там translate прекрасно срабатывает когда делаю setTransform...

I-Love-Microsoft ★★★★★ ()

А вы смещаетесь относительно чего? Сцена по умолчанию безразмерная и всегда в центре.

Думаю стоит сначала сделать setSceneRect.

PS: сцену не использую - сильно жирная.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Сцена это само собой, а вот View - должно двигаться так как я хочу. Оно для того и предназначено чтобы показать. Но QPainter уважает когда я ему translate говорю, а QGraphicsView - нет.

Сложно цензурно выразить что я думаю о тех кто разработал QGraphicsView... День потерял! И в интернете все подобные темы висят без ответов, а советы из багтрекера - ни один не сработал. Чтоб тормоза на машине разработчика QGraphicsView точно так же работали - он жмет а они не срабатывают!..

I-Love-Microsoft ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.