PyQt4: синхронизация между QSpinbox и QSlider - PullRequest
1 голос
/ 23 февраля 2012

Я устанавливаю связь между QSpinbox и QSlider.
QSpinbox имеет диапазон от -10,0 до 10,0, а QSlider имеет диапазон от -100 до 100.
Таким образом, значение QSlider, деленное на 10, связано с QSpinbox, и наоборот.
Я использую «valueChanged ()» СИГНАЛ друг другу.
И я хочу напечатать «3.5» в QSpinbox, в этом случае, когда я набираю только «3», «valueChanged» QSpinbox меняет значение QSlider, и QSlider делает снова. Итак, QSpinbox теряет фокус.
Я не могу набрать «3.5» за один выстрел.
"valueChanged ()" СИГНАЛ работает слишком усердно:)
Как я могу решить эту проблему?

1 Ответ

3 голосов
/ 23 февраля 2012

Сигнал valueChanged() действительно предназначен для активного срабатывания при его изменении. Если вы хотите, чтобы сигнал сработал по окончании редактирования, есть сигнал специально для этого, который называется editingFinished: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qabstractspinbox.html#editingFinished

Возможно, вы пропустили его, потому что он является членом суперкласса QAbstractSpinBox. Обратите внимание, что этот сигнал сработает, когда виджет потеряет фокус или пользователь нажмет ввод. Если это не то поведение, которое вам нужно, то единственный оставшийся вариант - использовать QTimer с короткой задержкой, которая перезапускается каждый раз, когда срабатывает valueChanged, и как только пользователь ждет достаточно долго, тайм-аут фактически обновит ваш ползунок. *

Я также заметил, что вы пытаетесь использовать нецелочисленные значения с QSpinBox, который предназначен для целых чисел. Возможно, вы захотите попробовать QDoubleSpinBox, который разработан для плавающей точности. valueChange() может вести себя немного лучше, чем ожидание десятичной дроби. Хотя я просто делаю предположение, поскольку я не проверял это: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdoublespinbox.html

...