QSlider位置仅在最小化app时才会更改

时间:2018-02-18 15:18:23

标签: c++ qt signals slots qslider

我在我的应用中使用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-> horizo​​ntalSlider-> value()我得到正确的(更改的)值但是滑块没有移动。我试过检查序列,如果它没有改变值两次(它没有),我试过调用repaint(),到目前为止没有任何作用。除非最小化(通过最小化按钮)或单击不同的应用程序(如Web浏览器),然后我可以看到滑块移动到正确的位置。我完全糊涂了。有没有人曾经遇到过这样的事情?

0 个答案:

没有答案