2010-03-24 20 views
6

¿Cuál es el mejor punto de partida para un widget Qt4 para ingresar latitud/longitud en formato DD: MM: SS (grados, minutos, segundos)? Personaliza un QLineEdit? Una serie de cajas giratorias?Widget Latitud/Longitud Qt4?

Respuesta

6

Existen algunas variantes:

QLineEdit con Validador - WASN. 'Lo suficientemente bueno para nosotros, no podríamos lograr una edición utilizable y una vista adecuada (con los símbolos', '' y grados en su lugar y la capacidad de prohibir valores incorrectos y aún permitir estados semi-correctos, y el comportamiento objetivo no es marcar errores y obliga al usuario a corregirlos, pero para permitir que el usuario ingrese solo valores válidos).

Tres vueltas de edición en una línea con los símbolos apropiados entre ellas agrupadas como un único widget y algún código para mover la entrada del teclado de uno no siguiente cuando sea necesario etc. Se ve lo suficientemente bueno en algunos casos, y puede encontrar la variante de realización en el famoso proyecto de mármol.

Aún así, mi jefe dijo que este enfoque es casi tan feo como el primero, así que aquí hay otro enfoque: la subclase QAbstractSpinBox, como lo hizo Trolltech en su QDateTimeEditor. De hecho, el comportamiento de dicho widget es casi similar a uno, implementado en QDateTimeEditor. Yo, yo mismo no lo hice todavía, debido a las prioridades de tareas, pero tendrá que hacer.

+1

¿Ha mirado el soporte de máscara de entrada de QLineEdit? He actualizado mi respuesta con esa alternativa también. – richardwb

+0

Sí, probaría esta variante también, el problema aquí es el hecho de que la máscara de entrada le dice al widget, que algunos símbolos son adecuados en algunas posiciones, eso no es cierto en nuestro caso: tal vez haya alguna combinación de validador y entrada lógica de máscara, que dibujará el grado y la marca de minuto/segundo en el lugar apropiado y manejará las posiciones +/-/dígitos correctas y los problemas de alcance. Más que decir, necesito control, que manejará diferentes formatos de coordenadas (d.m.s, d.m, donde m es decimal y distancias en metros) –

2

Yo usaría un QValidator, adjuntándolo a un QLineEdit usando QLineEdit::setValidator().

Necesitará una subclase para que pueda implementar la función validate() y posiblemente la función fixup() para su caso particular, ya que los dos validadores incluidos con Qt solo cubren números enteros y dobles.

Es un poco más amigable, en mi opinión, proporcionar un cuadro de entrada único para esto en lugar de tres cuadros de giro separados (que pueden parecer desordenados y no es tan bueno escribir).

[Editar: Otra alternativa es establecer un "validation input mask" en su QLineEdit usando QLineEdit::setInputMask(). Es posible que desee una edición de línea con símbolos que ya están en su lugar y marcadores de posición para otros caracteres, por ejemplo, y este enfoque le dará algo similar a eso. La aplicación QtDemo tiene un ejemplo de esto que se puede comprobar a cabo por la elección de Widgets-> edición de líneas (Reproductores está en la segunda página)]