0

QDial(ラップされたプロパティをtrueに設定して)時計回りまたは反時計回りに回転したかどうかを検出できる方法はありますか?

4

1 に答える 1

5

最小値を 0、最大値を 100 としますQDial。2 つの連続する値の変化の差が正の場合は反時計回りの回転であり、そうでない場合は時計回りの回転です (実際の値に合わせて調整する必要があります)。

シグナルをサブクラス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これで、サブクラスのプロパティを返す関数を追加できます。

于 2011-11-21T10:22:49.233 に答える