2011-11-21 1 views

답변

5

QDial 포장의 0 최소 100 최대를 보자. 두 개의 연속적인 값 변경의 차이가 양수이면 반 시계 방향 회전이 있습니다. 시계 방향 회전이 없으면 (실제 값으로 조정해야합니다)

QDial의 하위 클래스에 sliderMoved 신호를 사용해야합니다 :

이 신호는 sliderDown이 true이고 슬라이더가 움직일 때 방출됩니다. 이것은 대개 사용자가 슬라이더를 끌 때 발생합니다. 값 이 새 슬라이더 위치입니다.

추적이 꺼진 경우에도 신호가 방출된다.

는 회전이

connect(this, SIGNAL(sliderMoved(int)), this, SLOT(calculateRotationDirection(int))); 

void calculateRotationDirection(int v) 
{ 
    int difference = previousValue - v; 

    // make sure we have not reached the start... 
    if (v == 0) 
    { 
     if (previousValue == 100) 
      direction = DIRECTION_CLOCKWISE; 
     else 
      direction = DIRECTION_ANTICLOCKWISE; 
    } 
    else if (v == 100) 
    { 
     if (previousValue == 0) 
      direction = DIRECTION_ANTICLOCKWISE; 
     else 
      direction = DIRECTION_CLOCKWISE; 
    } 
    else 
    { 
     if (difference > 0) 
     direction = DIRECTION_ANTICLOCKWISE; // a simple enum 
     else if (difference < 0) 
     direction = DIRECTION_CLOCKWISE; 
    } 
    previousValue = v; // store the previous value 
} 

지금 당신은 당신의 서브 클래스의 direction 속성을 반환하는 함수를 추가 할 수 있습니다 시계 방향 또는 반 시계 방향 인 경우 계산하는 슬롯으로이 신호를 연결합니다.