0

我在我的应用程序中使用 QSlider 元素作为工具开关。我从一个离开的同事那里接手了这个项目。到目前为止一切都很好,除了这个开关周围有一个黑色标签。我不能真正改变风格并重新设计所有东西,所以我被标签和滑块作为开关卡住了。我需要处理来自按钮单击和按钮释放的事件。我这样做-

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);

和 changeSliderValue()-

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() 到目前为止没有任何效果。除非不最小化(通过最小化按钮)或单击不同的应用程序(如网络浏览器),然后我可以看到滑块移动到正确的位置。我完全糊涂了。有没有人遇到过这样的事情?

4

0 回答 0