Автор: 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)
да, всё будет работать...