2013-03-27 7 views
10

Мне нужно реализовать элемент управления QSpinBox, который должен иметь возможность обрабатывать значения int64 как минимум & максимальных значений. Текущая реализация поддерживает только значения int32.Как подкласс QSpinBox, чтобы он мог иметь значения int64 как максимум и минимум

Конец дня мой QSpinBox должен принимать любое значение между 9223372036854775807 и -9223372036854775808

Что мне нужно делать, если я, чтобы достичь этого подклассов QAbstractSpinbox?

ответ

11
  1. Производить от QAbstractSpinBox.
  2. Добавить QValidator в QLineEdit, чтобы разрешать действительные значения int64.
  3. Добавьте объект с именем value, чтобы предоставить доступ к члену int64, который фактически сохраняет значение.
  4. Reimplment stepBy(int steps) для изменения номера.
  5. Внедрите методы и свойства, специфичные для QSpinBox, которые вас интересуют (минимальные/максимальные пределы, префикс, суффикс и т. Д.).

По существу, вы поддерживаете два состояния: одно - это фактическое значение int64, другое - текст, хранящийся в QLineEdit. Обычно это просто обновляется:

lineEdit()->setText(QString::number(myNumber)); 

Но придется быть переделаны немного, если пользователь хочет префикс или суффикс.

+0

Благодарим вас за ответ, но как я могу создать валидатор для проверки диапазона Int64, QIntValidator предоставляет только int32? – warunanc

+1

Думаю, мне нужно подклассифицировать QValidator и создать собственный Int64Validator – warunanc

+2

Вот как он выглядит. – cmannett85