2013-03-27 13 views
10

Devo implementare un controllo QSpinBox che dovrebbe essere in grado di elaborare i valori int64 in quanto è il minimo & valori massimi. L'implementazione corrente supporta solo i valori int32.Come sottoclasse QSpinBox in modo che possa avere valori int64 come massimo e minimo

Fine della giornata mia QSpinBox dovrebbe accettare qualsiasi valore compreso tra 9223372036854775807 e -9223372036854775808

Che cosa devo fare, se voglio raggiungere questo obiettivo sottoclasse QAbstractSpinbox?

risposta

11
  1. Deriva da QAbstractSpinBox.
  2. Aggiungere un QValidator allo QLineEdit per consentire solo valori int64 validi.
  3. Aggiungere una proprietà denominata value per fornire l'accesso al membro int64 che detiene effettivamente il valore.
  4. Reimplment stepBy(int steps) per modificare il numero.
  5. Implementare i metodi e le proprietà specifiche per QSpinBox a cui si è interessati (limiti minimo/massimo, prefisso, suffisso, ecc.).

In sostanza si mantengono due stati: uno è il valore int64 corrente, l'altro è il testo detenuto dallo QLineEdit. Di solito questo è solo aggiornato da:

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

Ma dovrà essere ottimizzato un po 'se l'utente desidera un prefisso o suffisso.

+0

Grazie per la risposta, ma come posso creare un validatore per convalidare l'intervallo Int64, QIntValidator fornisce solo int32? – warunanc

+1

Credo di dover sottoclasse QValidator e creare il mio Int64Validator personale – warunanc

+2

Ecco come appare. – cmannett85

Problemi correlati