2012-09-13 4 views
5

Ich versuche einen QSlider zu verwenden, aber wenn jemand auf eine Position X klickt, auf die er den Schieberegler setzen möchte, setzt der Schieberegler den Wert immer zuerst auf Maximum oder Minimum und dann auf den Wert X. Es gibt also einen unnötigen Schritt dazwischen. Wie kann ich diesen Schritt vermeiden?QSlider macht unnötige Schritte

Ich habe den Schieberegler mit Hilfe von QTDesigner implementiert. Der Code für die verbleibenden Setup ist die folgende:

_ui->horizontalSlider->setRange(1, aMaximalValue); 
_ui->horizontalSlider->setValue(theCurrentValue); 
connect(_ui->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(onValueOfSliderChanged(int))); 

Antwort

3

Wenn ein QSlider verwenden, meine Erfahrung sagt, dass, wenn Sie an einer bestimmten Position in dem Schieber klicken, der rechts neben der aktuellen Position (horizontale Schieberegler unter Berücksichtigung), es erhöht den Schiebereglerwert um die Seitenschrittgröße. Wenn der Klickwert links von der aktuellen Position liegt, verringert sich der Schiebereglerwert um die Seitenschrittgröße. Nur wenn Sie den Schieberegler an diesen Ort ziehen, wird der Wert auf den gewünschten Wert festgelegt und nicht beim Klicken. Versuchen Sie, die pageStep-Größe festzulegen, um festzustellen, ob dies der Fall ist.

+0

Vielen Dank beschrieben wurde, war dies ein guter Hinweis, aber leider konnte ich behebt das Problem noch nicht. Aber es half, das Problem ein wenig besser zu verstehen. Ich verwende einen QProgressDialog, weil das Ändern der Schiebereglerwerte zu einer zeitaufwendigen Berechnung führt. Als Ergebnis scheint der Schieberegler besser zu funktionieren, denn nachdem der Wert um pageStep size erhöht wurde, scheint es auch das Signal zu bekommen, dass er auf den Wert gesetzt wird, auf den ich geklickt habe. – evilSquirrel

1

Ja, genau wie shubh erklärt, der Seitenschritt ist wahrscheinlich zu groß. Ein häufiges Problem bei QSliders ist, dass sie nicht zu der Position springen, auf die Sie geklickt haben, sondern einen Seitenschritt in diese Richtung verschieben.

Eine Lösung für dieses Problem ist in this question