Пусть 0 минимум и 100 максимум вашего обернутого QDial
.Если разница между двумя последовательными изменениями значений является положительной, то у вас есть вращение против часовой стрелки, если нет, у вас есть вращение по часовой стрелке (вы должны отрегулировать его в соответствии с вашими фактическими значениями)
Вы должны подкласс 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
вашего подкласса.