我在我的应用中使用QSlider元素作为toogle开关。我从一个离开的我的同事那里接过了这个项目。到目前为止一切都那么好,除了这个开关周围有一个黑色标签。我无法真正改变风格并重做一切,所以我坚持使用标签和滑块作为开关。 我需要处理按钮点击和按钮释放的事件。我这样做 -
bool CustomSlider::eventFilter(QObject *obj, QEvent *ev )
{
if (ev->type() == QEvent::MouseButtonRelease)
{
changeSliderValue();
}
if(ev->type() == QEvent::MouseButtonPress){
lastSaved = ui->horizontalSlider->value();
}
return QWidget::eventFilter(obj,ev);
并且更改滑动值() -
void CustomSlider::changeSliderValue()
{
int current = ui->horizontalSlider->value();
if(lastSaved==current){
if(current){
ui->horizontalSlider->setValue(0);
}else{
ui->horizontalSlider->setValue(1);
}
}
}
因此,简而言之,如果我点击,它会保存滑块的状态,并在释放时检查已保存的状态。我这样做是因为QSlider也有按下按钮信号。我把调试消息放在我的代码中,有趣的是调试消息。所以我的代码有效。如果我调用ui-> horizontalSlider-> value()我得到正确的(更改的)值但是滑块没有移动。我试过检查序列,如果它没有改变值两次(它没有),我试过调用repaint(),到目前为止没有任何作用。除非最小化(通过最小化按钮)或单击不同的应用程序(如Web浏览器),然后我可以看到滑块移动到正确的位置。我完全糊涂了。有没有人曾经遇到过这样的事情?