有没有什么方法可以检测QDial (属性设置为true)是顺时针旋转还是逆时针旋转?
发布于 2011-11-21 18:22:49
让0表示包装的QDial的最小值,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属性的函数。
https://stackoverflow.com/questions/8210148
复制相似问题