Как подкласс QSpinBox, чтобы он мог иметь значения int64 как максимум и минимум

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

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

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

Ответ 1

  • Вывести из QAbstractSpinBox.
  • Добавьте QValidator в QLineEdit только для допустимых значений int64.
  • Добавьте свойство с именем value, чтобы предоставить доступ к члену int64, который фактически сохраняет значение.
  • Reimplment stepBy(int steps), чтобы изменить номер.
  • Внедрите интересующие вас методы и свойства, относящиеся к QSpinBox (минимальные/максимальные пределы, префикс, суффикс и т.д.).

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

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

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