Qt.QSlider



  • Hallo,

    Ich schreibe an einem Music Player und benutze einen QTimer um den Wert des QSliders jede Sekunde zu inkrementieren. Nun suche ich, wie ich (vermutlich mit Events) ein Signal einbauen kann, ob der Slider manuell vom User bewegt wird, da sich sonst immer eine Verzögerung beim Abspielen des Tracks einschiebt, wenn ich dessen Position setzen will. Da gibt es nämlich kein passendes Signal dafür, außer valueChanged() , das Problem hierbei ist jedoch, dass dieses Signal auch ausgelöst wird, wenn der Timer das Signal auslöst.

    Was ich also suche ist userChangedValue() , da es das aber nicht gibt, muss ich es irgendwie selber bauen. Jemand ne Idee wie ich das bewerkstelligen kann?

    PS: sliderReleased() ist nicht die Lösung, da das Signal nicht ausgelöst wird, wenn man z.B. mit der Tastatur oder dem Scrollbalken den Slider-Wert ändert.



  • Hallo,

    Du kannst das Signal bewusst unterbinden. Wenn Du das machst, kommen nur noch Signale an, die der Nutzer verursacht.

    Hier der pseudo Code:

    void Foo::myTimerEvent() {
      bool oldValue = m_slider->blockSignals(true);
    
      m_slider->setValue(123);
    
      m_slider->blockSignals(oldValue);
    }
    

    Alternativ wäre der "sender()" zu prüfen. Ist der Code wie oben, dann müsste als sender() == QTimer Object sein und in dem Fall nicht QSlider.

    void Foo::valueChanged() {
      if(sender() == m_slider) {
        // user 
      } else {
        // other
      }
    }
    

    Grüße



  • Danke, das mit dem blockSignals() hat geklappt!


Anmelden zum Antworten