QT - dar formato numérico a un lineEdit

 
Vista:
sin imagen de perfil

dar formato numérico a un lineEdit

Publicado por Rodolfo (9 intervenciones) el 19/05/2014 15:34:49
Hola todos, estoy diseñando un formulario en el cual tengo varios lineEdit que deben tener valores numéricos, pero no puedo que el imputmask les de el formato que quiero: "999,999,999.99" este es el código que estoy usando:

ui->comf01->setText(qry.value(49).toString());
ui->comf01->setInputMask ( "999,999,999.99" );

El query es de mysql, el resultado que obtengo con esto es " 850,273, .38", que estoy haciendo mal?

Les agradezco de antemano su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

dar formato numérico a un lineEdit

Publicado por juanki (102 intervenciones) el 19/05/2014 16:50:59
Hola

En la máscara estás usando el 9, que requiere un dígito, puedes usar el 0, que permite un dígito, aunque no lo requiere. Es decir, si usas el 9, espera que pongas tantos números como nueves haya, si usas el cero puedes dejar espacios en blanco.

Luego, solo he usado separador para los decimales, así que no estoy seguro de cómo se comportará.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

dar formato numérico a un lineEdit

Publicado por Rodolfo (9 intervenciones) el 19/05/2014 17:03:17
Gracias por tu ayuda. Cambie los "9" por "0" asi:
ui->comf01->setInputMask ( "000,000,000.00" );

Pero el resultado es el mismo los 850,273.38 los sigue representando asi: " 850,273, .38"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

dar formato numérico a un lineEdit

Publicado por juanki (102 intervenciones) el 20/05/2014 09:39:20
Hola

Se me ocurre que compruebes en qué formato está el número que tratas de poner en el LineEdit, es decir, justo antes de ponerlo en el LineEdit imprímelo por consola con qDebug() para ver cómo es el número:

1
2
3
4
5
ui->comf01->setText(qry.value(49).toString());
 
qDebug() << qry.value(49).toString();
 
ui->comf01->setInputMask ( "999,999,999.99" );

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

dar formato numérico a un lineEdit

Publicado por Rodolfo (9 intervenciones) el 20/05/2014 16:49:57
gracias juanki, tenes razón el valor que me devuelve el debug es "850273.38", o sea es una hilera, en este caso tengo otra pregunta, si en la tabla de mysql la variable que estoy usando en este caso es numérica, porque la trata como una hilera, o mejor dicho como debo hacer para usarla como tal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

dar formato numérico a un lineEdit

Publicado por juanki (102 intervenciones) el 20/05/2014 19:30:46
Hola

Obtienes una cadena porque tú estás extrayendo el contenido de la consulta como un QString usando el método .toString().

Alguna cosa que se me ocurre es que por ejemplo pruebes una máscara así "000,000,000.99; ". Y pon la máscara antes de ponerle el número.
También puedes probar extrayendo el número como un float y pasárselo tú al LineEdit formateándolo:

1
2
3
ui->comf01->setInputMask ( "999,999,999.99" );
float valor = qry.value(49).toFloat();
ui->comf01->setText(QString::number(valor, 'f', 2));

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

dar formato numérico a un lineEdit

Publicado por Rodolfo (9 intervenciones) el 20/05/2014 21:12:06
juanki me da el mismo error, aun usando el formato "000,000,000.99", me imagino que debe existir una forma de hacerlo sin dar mucho rodeo. Pero en este momento lo que se me ocurre es algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
float valor = qry.value(49).toFloat();
 
if (valor >1000 and valor <= 999999.99)
{
    ui->comf01->setInputMask ( "999,999.99" );
}
else
{
    if (valor >999999.99)
    {
         ui->comf01->setInputMask ( "999,999,999.99" );
    }
}
ui->comf01->setText(QString::number(valor, 'f', 2));

Esto no es un parche, es un remiendo, pero no encuentro otra solución. Si sabes o se te ocurre algo mejor te lo agradecería.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

dar formato numérico a un lineEdit

Publicado por juanki (102 intervenciones) el 20/05/2014 21:49:07
¿Funciona de esa manera? Si es así, pues ya está

Y para evitarte ir cambiando de máscara, ¿no te vale con ponerla una vez al inicio del programa usando ceros?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

dar formato numérico a un lineEdit

Publicado por Rodolfo (9 intervenciones) el 21/05/2014 23:10:30
si lo pongo al principio tengo que darle un formato como "000,000,000.99" pero aun pasando el valor a float siempre aparecen espacios en blando entre los decimales y los enteros, el problema de esa aberración es que tendría que hacer eso para más de 48 variables.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar