Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Изменение системы координат

Автор: Trisch 30.5.2012, 16:08

В виджетах начало координат находится в верхнем левом углу. Можно ли сделать так чтобы она находилась, к примеру, в нижнем правом углу? Если можно то как?

Автор: ViGOur 30.5.2012, 17:11

Смотри: http://doc.crossplatform.ru/qt/4.6.x/coordsys.html#transformations

А вообще думаю будет полезным перечитать всё, по поводу Системы координат. :)

Автор: Trisch 31.5.2012, 11:27

Цитата(ViGOur @ 30.5.2012, 17:11) *
Смотри: http://doc.crossplatform.ru/qt/4.6.x/coordsys.html#transformations

А вообще думаю будет полезным перечитать всё, поп поводу Системы координат. :)


Я смотрел в эту сторону))) Но в этом случае я без понятия как получит координаты мыши в новой системе координат(((

Автор: wiz29 31.5.2012, 12:35

Цитата(Trisch @ 31.5.2012, 12:27) *
Я смотрел в эту сторону))) Но в этом случае я без понятия как получит координаты мыши в новой системе координат(((



Нужно просто трансформировать позицию из системы T1(начальная система координат с началом в левом верхнем углу) в систему Т2 (новая система координат)

Например:

есть экран size == (200, 100)
пусть Т1 - нормальная оконная система координат (с центром в левом верхнем углу и осью У направленной вниз)
пусть Т2 - новая система координат (с началом в левом нижнем углу и осью У направленной вверх)

тогда матрица трансформации для перехода из Т1 в Т2 будет иметь след вид.
QTransform transform;
transform.translate(0, 100);
transform.scale(1.0, -1.0);

далее трансформации позиции в новую систему координат:
QPoint mousePosT1 = ...;
QPoint mousePosT2 = transform.map(mousePos);

если надо получить обратно то:
QPoint posT2 = ...;
QPoint posT1 = transform.inverted().map(posT2);
(в случае переноса системы координат с использованием невырожденных аффинных преобразований обратное преобразование всегда существует)

Автор: Trisch 31.5.2012, 15:01

А будет ли с преобразованными координатами работать такая функция как geometry()?

Автор: ViGOur 31.5.2012, 15:02

да, всё будет работать...

Автор: Trisch 31.5.2012, 15:23

Цитата(ViGOur @ 31.5.2012, 15:02) *
да, всё будет работать...


извиняюсь не geometry(), а setGeometry().

Автор: ViGOur 31.5.2012, 15:31

Цитата(ViGOur @ 31.5.2012, 16:02) *
да, всё будет работать...


Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)