我尝试同时使用 QSlider、QTimer 和 valueChanged() 信号,但我需要区分滑块的值是由用户更改还是由计时器刻度更改。我怎样才能做到这一点?通过下面的代码,我尝试确定计时器何时更改滑块,但我无法确定用户何时更改信号。(此外,它是一个 OpenGL 动画,滑块的行为类似于时间轴,即使时间轴每隔一秒动画播放 30 Hz 就改变一次值,因此如果用户想使用滑块来制作正向或反向动画,我需要检查滑块的信号。但是滑块从一秒开始计时器)
connect(timer, SIGNAL(timeout()), this,SLOT(timerTick()));
connect(slider, SIGNAL(valueChanged(int)),this, SLOT(sliderChange()));
void MainWindow::sliderChange()
{
if (userInterrupt)
{
.. Call Function A
}
}
void MainWindow::timerTick()
{
slider->setValue(slider.value()+1);
userInterrupt=false;
}
编辑:添加了发件人,但由于递归,它无法清楚地运行。我仍然无法决定信号
connect(timer, SIGNAL(timeout()), this,SLOT(sliderChange()));
connect(slider, SIGNAL(valueChanged(int)),this, SLOT(sliderChange()));
void MainWindow::sliderChange()
{
QObject * obj =sender();
if (obj==slider)
{
.. Call Function A
}else
{
slider->setValue(slider.value()+1);
}
}