Какова лучшая начальная точка для виджета Qt4 для ввода Широты/Долготы в формате DD:MM:SS (градусы, минуты, секунды)? Настроить QLineEdit? Серия полей счетчика?
Есть несколько вариантов:
QLineEdit с Validator - нам было недостаточно, мы не смогли добиться удобного редактирования и правильного просмотра (с ',' и градусы на месте и возможность запрещать неправильные значения и по-прежнему допускать полуправильные состояния, и целевое поведение состоит не в том, чтобы отмечать ошибки и заставлять пользователя их исправлять, а в том, чтобы позволить пользователю вводить только допустимые значения).
Три изменения вращения в строке с соответствующими символами между ними, сгруппированными как один виджет, и некоторый код для перемещения ввода с клавиатуры с одного элемента на другой, когда это необходимо и т. Д. В некоторых случаях выглядит достаточно хорошо, и вы можете найти вариант реализации в известном проекте Marble.
Тем не менее, мой босс сказал, что этот подход почти такой же уродливый, как и первый, поэтому вот еще один подход: подкласс QAbstractSpinBox, как это сделал Trolltech в своем QDateTimeEditor. Фактически, поведение такого виджета практически аналогично тому, что реализовано в QDateTimeEditor. Я сам еще не делал этого из-за приоритетов задач, но придется это сделать.
Я бы использовал QValidator
, прикрепив его к QLineEdit
с помощью QLineEdit :: setValidator ( )
.
Вам необходимо создать подкласс, чтобы вы могли реализовать функцию validate ()
и, возможно, функцию fixup ()
для вашего конкретного случая, поскольку два валидатора включены только в Qt покрывают целые и двойные числа.
На мой взгляд, немного удобнее предоставить для этого одно поле ввода, чем три отдельных окна счетчиков (которые могут выглядеть загроможденными и не так приятно вводить).
[Edit: Еще одна альтернатива - установить « маску ввода проверки » в вашем QLineEdit, используя QLineEdit :: setInputMask ()
. Например, вам может потребоваться редактирование строки с уже имеющимися символами и заполнителями для других символов, и этот подход даст вам нечто подобное. В приложении QtDemo есть пример этого, который вы можете проверить, выбрав Widgets-> Line Edits (Виджеты находятся на второй странице).]