2012-02-23 2 views
1

QSpinbox와 QSlider를 연결합니다.
QSpinbox의 범위는 -10.0 ~ 10.0이며 QSlider의 범위는 -100 ~ 100입니다.
따라서 QSlider의 값을 10으로 나눈 값은 QSpinbox에 연결되며 그 반대의 경우도 마찬가지입니다.
"valueChanged()"신호를 서로 사용합니다.
QSpinbox에 "3.5"를 입력하고 싶습니다.이 경우 "3"을 입력하면 QSpinbox의 "valueChanged"가 QSlider의 값을 변경하고 QSlider가 다시 작동합니다. 따라서 QSpinbox는 포커스를 잃습니다.
한 번에 "3.5"를 입력 할 수 없습니다.
"valueChanged()"SIGNAL이 너무 부단하게 작동합니다.
어떻게이 문제를 해결할 수 있습니까?PyQt4 : QSpinbox와 QSlider를 동기화합니다.

답변

3

valueChanged() 신호는 실제로 변경 될 때 적극적으로 발사됩니다. 편집이 끝나면 신호가 울리도록하려면 editingFinished이라는 신호가 있습니다. http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qabstractspinbox.html#editingFinished

슈퍼 클래스 QAbstractSpinBox의 멤버이므로 간과 할 수 있습니다. 위젯이 포커스를 잃거나 사용자가 엔터를 치면이 신호가 발생합니다. 그것이 원하는 동작이 아니라면, 남은 유일한 옵션은 QTimer를 사용하여 짧은 지연 시간을 사용하여 매번 valueChanged이 다시 시작되고 사용자가 충분히 오래 기다리면 실제로 시간 제한이 슬라이더를 업데이트합니다.

int를 위해 설계된 QSpinBox에서 정수가 아닌 값을 사용하려고합니다. 유동 정밀도를 위해 설계된 QDoubleSpinBox를 사용해 볼 수도 있습니다. valueChange()은 십진수를 예상 할 때보 다 약간 더 행동 할 수 있습니다. 비록 제가 테스트하지 않았기 때문에 추측을하고 있지만 : http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdoublespinbox.html

+0

"valueChanged"를 "editingFinished"로 변경했습니다. 고맙습니다! –

관련 문제