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