2012-09-13 14 views
5

Próbuję użyć QSlider, ale jeśli ktoś kliknie na pozycję X, w której chce umieścić suwak, suwak zawsze ustawia najpierw wartość maksymalną lub minimalną, a następnie wartość X. Tak więc istnieje niepotrzebny krok między nimi. Jak mogę uniknąć tego kroku?QSlider wykonuje niepotrzebne kroki

Zaimplementowałem suwak przy pomocy QTDesigner. Kod dla pozostałych ustawień jest następująca:

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

Odpowiedz

3

Przy zastosowaniu QSlider, moje doświadczenie mówi, że po kliknięciu na pewnej pozycji w suwaku, który ma prawo od aktualnej pozycji (biorąc pod uwagę suwaka poziomego), zwiększy wartość suwaka o rozmiar pageStep. Podobnie, jeśli wartość kliknięcia znajduje się po lewej stronie bieżącego położenia, zmniejszy wartość suwaka o wielkość strony. Tylko wtedy, gdy przeciągniesz suwak w to miejsce, ustawi on wartość zgodnie z oczekiwaniami, a nie po kliknięciu. Spróbuj ustawić rozmiar strony, aby sprawdzić, czy to jest problem.

+0

Wielkie dzięki, to była dobra wskazówka, ale niestety wciąż nie mógł rozwiązać problem. Ale pomogło to nieco lepiej zrozumieć problem. Używam QProgressDialog, ponieważ operacja zmiany wartości suwaków powoduje czasochłonne obliczenia. W efekcie suwak wydaje się działać lepiej, ponieważ po zwiększeniu wartości o rozmiar pageStep, wydaje się, że dostaje sygnał, aby ustawić go na wartość, którą kliknąłem. – evilSquirrel

1

Tak, tak jak wyjaśniono shubh, pagestep jest prawdopodobnie zbyt duży. Typową kwestią związaną z QSliders jest to, że nie przeskakują one do pozycji, którą kliknąłeś, ale przesuwają pagestep w tym kierunku.

Rozwiązaniem tego problemu została opisana w this question