2010-12-10 4 views
5

사용자 정의 모서리를 고정하는 동안 QPushButton 하위 클래스의 크기를 변경하려고합니다 (항상 왼쪽 위 모퉁이가 아님). QPushButton은 QFrame을 부모로 정의하고 윈도우에서 자유롭게 움직입니다. 하위 클래스 코드에서 QPushButton 하위 클래스의 크기를 변경하려고하면 mouseEvents에서 제공 한 QPoint가 로컬이므로 문제가 발생한다고 생각합니다. myButton-> mapToGlobal (QPoint) 및 myButton-> mapFromGlobal으로 작업을 시도했지만 어떻게 작동하는지 잘 알지 못합니다. 예제를 검색하면 나를 빈손으로 남겨 두었습니다. 누구든지 간단한 예를 제공 할 수 있습니까?Qt QPoint 전역/로컬 매핑

답변

12

로컬 (위젯) 좌표는 위젯의 왼쪽 위 모서리를 기준으로합니다. 전역 좌표는 화면 좌표입니다. 그들은 쉽게 변환 가능하며, QMouseEvent와 같은 이벤트는 local (pos()) 및 global (globalPos()) 좌표를 제공합니다.

const QPoint localInB = a->mapTo(b, localPosInA); 

예 : 당신이에서 최상위 위젯 (W1)을 말해봐 (100110)는 B를 위젯 위젯 A로부터 매핑하려면 , 당신은 짧은

const QPoint global = a->mapToGlobal(localPosInA); 
const QPoint localInB = b->mapFromGlobal(global); 

할 또는 수 있습니다 (10, 10) (w1 좌표)에 자식 위젯 w2와 (20, 20) (w2 좌표)에 w2의 마우스 이벤트가있는 화면 좌표 (화면 좌표)이면 마우스 커서의 전역 위치는

(100,110) + (10,10) + (20,20) = (130,140) (화면 좌표)

w2-> mapToGlobal (mousePos)입니다.

W2-> W2의 부모 W1 같이 mapTo (W1, mousePos)이되거나, W2-> mapToParent (mousePos) 인

(10,10) + (20, 20) = (30, 30) (w1 좌표).

모든 것을 전역 좌표로 변환하고 거기에서 계산을 한 다음 결과를 위젯, 즉 필요한 상황에 다시 매핑하는 것이 가장 쉽습니다.