Pregunta respecto a validar un dato
-
De antemano un saludo comunidad, veran tengo el siguiente problema: (tomen en cuenta que lecantidad es un numero de celular)
int intcantidad; //declaro una variable tipo entero strcantidad=ui->lecantidad->text(); //llamo el dato contenido en el line Edit y almaceno en variable if(intcantidad=!int){ QMessageBox::warning(this, "Error tipo de dato", "Porfavor digite un numero"); }//aca esta el problema como le digo que si es distinto de un numero. intcantidad=strcantidad.toInt();//convierto a entero el string en caso de ser necesario
o si simplemente hay alguna forma de hacer que el line edit sea de introducir solo numeros, en cuyo casi encontre que se puede validar el dato de la siguiente forma:
ui->lecantidad->setValidator(new QIntValidator(0, 999999999999, this));
//valida numero en labelcantidadLa razon por la cual hago esta pregunta es por que quiero almacenar el dato de cuya forma ocupe menos memoria posible ya saben optimizar y no se si estoy bien corrijanme de ser necesario apenas estoy empezando en qt, pero al decirle 999999999999 ocuparia mucho espacio en la memoria simplemente quiero validar que el campo en donde escribe el usuario sea numerico y si no le bote algun error y decirle que escriba un numero.
Tambien podria validarlo al momento de enviar el dato como al momento de que el usuario lo escriba en cuyo caso seria mejor.
todo esto lo hago por curiosidad pese a que estoy diseñando mi propio software como hobbit pero quiero que quede bien, de antemano agradezco sus respuestas y estare atento
-
Sorry for bad Spanish!
999999999999 no es un int, el ocupe 64bits e es un long long
ui->lecantidad->setValidator(new QIntValidator(0,std::numeric_limits<int>::max(),this));
es la solution correctasi tu vuoles validarlo al momento de enviar el dato ugualmente
int intcantidad; //declaro una variable tipo entero strcantidad=ui->lecantidad->text(); //llamo el dato contenido en el line Edit y almaceno en variable bool check; intcantidad=strcantidad.toInt(&check); if(!check) QMessageBox::warning(this, "Error tipo de dato", "Porfavor digite un numero");
normalmente no te procupe del la memoria si la diferentia es solamente una pareja de byte
-
Gracias por tu respuesta esta bien de no ser por el hecho que un numero de celular se compone de 13 digitos minimo (2 para el indicativo ejemplo: +(57)y 10 digitos(3333333333)) al poner tu respuesta solo me deja escribir 10 digitos, ya lo comprobe y si cambio el valor en max() me da un error.
Google translate..:)
Thanks for your answer is fine if not for the fact that a number of cell is composed of 13 minimum digit number (2 for the indicative example: + (57) and 10 digits (3333333333)) by putting your answer just let me write 10 digits, and I checked and if I change the value max () gives me an error.
-
Estube pensando y si mas bien declaro una variable tipo char existe alguna forma de validar cada char que sea de tipo numérico?
-
Gracias por tu colaboración, gracias a tu primer comentario logre solucionarlo tenia un error era al momento de ubicar las variables, es decir las estaba ubicando antes de que la interfaz se iniciara por tanto estaba bien pero no me guardaba el dato en la variable por que la UI aun no se habia creado (disculpa soy un novato, pero es mi primer software y llevo apenas una semana de conocer QT).
para cerrar el tema la solución quedo de la siguiente forma
evento OnClick en el determinado botón:
strcelular=ui->lecelular->text(); //guardo todo el texto en la variable declarada en x.h
intcelular=strcelular.toInt(&cheack); //convierto texto obtenido en entero y lo almaceno en una variable declarada tambien como entera en x.h
if(!cheack){
QMessageBox::warning(this, "Error tipo de dato", "Porfavor introduzca un numero de celular valido");
} //compración que el dato es tipo numérico para poder continuar
ui->prueba->setText(strcelular); // para comprobar que todo es correcto cree un label que me escriba el dato almacenado y comprobado satisfactoriamente.Gracias de antemano pueden cerrar el tema, gracias por tu colaboracion VRonin.
-
si el numero en strcelular es mas grande de
std::numeric_limits<int>::max()
cheack sera' false. strcelular.toLongLong accepta numeros sinstd::numeric_limits<qint64>::max()
Si tu queres validar una sequentia de numeros como un numero de celular regular expressions son la mejor solution
-
Hola que tal,lo que deberias hacer es usar expresiones regulares.
Aqui encontraras los ejemplos
http://doc.qt.io/qt-5/qregularexpression.htmlTe aseguro que con eso solucionaras tu problema. Suerte y saludos.