[Kde-devel-es] QSpinBox con valores en coma flotante y el
Validador
Nacho Martín Oya
nachooya at teleline.es
Mon Jun 28 15:31:30 CEST 2004
Creo que lo que te voy a poner no es la solución al problema que tienes, pero
por si te siriviese de inspiración a encontrar una solución te adjunto el
código que usé para solventar el tema de los SpinBox con decimales que use en
una aplicación. Sólo implementé las funciones que yo necesitaba, así que no
es gran cosa, pero bueno judga tú mismo:
class DecimalSpinBox : public QSpinBox {
Q_OBJECT
private:
int dec;
int mul;
public:
DecimalSpinBox (QWidget * parent, const char * name, int _dec) : QSpinBox
(parent, name) {
dec=_dec;
mul= int (pow (10,_dec));
}
float fValue () {
return (float (value ()) / float (mul));
}
void fSetValue (float value) {
setValue (int (value*mul));
}
void fSetRange (float min, float max) {
setRange (int (min*mul), int (max*mul));
}
QString mapValueToText (int value) {
return (QString::number (float (value)/mul, 'f', dec));
}
int mapTextToValue (bool *ok) {
return (int) (mul * text().toFloat(ok));
}
};
Espero que te sirva para algo. Un saludo.
El Sábado 27 de Junio de 2004 17:45, Raúl escribió:
> Estoy intentado generar mi propio QSpinBox para poder tener valores en
> coma flotante. He pasado por varias versiones y en todas me funciona
> ese asunto, pero el validador no hay forma de hacerlo funcionar.
>
> Si pongo un validador del tipo QIntValidator, funciona, pero claro, no
> puedo escribir "123.345". Si pongo un QDoubleValidator la sensacion
> que da es que este no esta funcionado
>
> El ultimo codigo que estoy probando esta sacado directamente de:
>
> http://webcvs.kde.org/cgi-bin/cvsweb.cgi/kdegraphics/kview/modules/scale/
> , archivos kfloatspinbox.[cpp|h], ligeramente adaptados para
> no depender de KDE.
>
> Tras crear el widget hago mySpinBox1->setRange(-180.0,180.0,1,4); para
> fijar el valor minimo a -180.0, el maximo a 180, con incrementos de 1
> en 1 y 4 decimales.
>
> void MySpinBox::setRange( float minValue, float maxValue, float step,
> unsigned int precision )
> {
> m_factor = (int)pow( 10.0, (double)precision );
> m_min = (int)( minValue * m_factor );
> m_max = (int)( maxValue * m_factor );
> m_step = (int)( step * m_factor);
> QSpinBox::setRange( m_min, m_max);
> setSteps( m_step, m_step * 10 * );
> if( precision == 0)
> setValidator( new QIntValidator(m_min, m_max, this));
> else
> setValidator( new QDoubleValidator(minValue, maxValue,
> true,this)); }
>
> El rango si esta funcionado, por que no puedo pasar de 180, y el
> incremento tambien funciona, pero el validado de datos no se comporta
> como esperas.
>
> Se supone que si escribes en el widget 19 y acto seguido intentas
> poner otro valor, al estar fuera de rango, no deberia dejarte, pero
> curiosamente si puedo. Puedo poner cualquier valor, eso si, al perder
> el foco, el widget se pone a su valor maximo de 180.
--
*******************************************************************
* Do you want to try my last application?
* http://ktuxcall.sourceforge.net
* http://sourceforge.net/projects/ktuxcall/
* http://www.kde-apps.org/content/show.php?content=11732
*******************************************************************
More information about the Kde-devel-es
mailing list