Russian Qt Forum
Апреля 20, 2025, 06:43
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
QIntValidator
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QIntValidator (Прочитано 5034 раз)
Bol4onok
Новичок
Offline
Сообщений: 3
QIntValidator
«
:
Сентября 20, 2021, 16:55 »
Здравствуйте, у меня такая проблема, я новичок в Qt, но облазив много сайтов я так и не нашёл решение своей проблемы, у меня есть lineEdit, ввод данных в которой я хочу ограничить до диапазона от 1 до 10, я использую QIntValidator, где задаю значение (1,10), но ставя такой минимум/максимум я могу вводить числа до 99, как мне можно решить это проблему? Я использую такой код:
QValidator *validator = new QIntValidator(1,10). Буду рад любой помощи.
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: QIntValidator
«
Ответ #1 :
Сентября 20, 2021, 17:13 »
Видимо, сделать свой валидатор: наследовать QValidator и определить метод validate. Внутри этого метода использовать QIntValidator(1,10), а для строк, прошедших эту проверку, и выполнять проверку на диапазон 1...10.
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Bol4onok
Новичок
Offline
Сообщений: 3
Re: QIntValidator
«
Ответ #2 :
Сентября 20, 2021, 17:16 »
Звучит непонятно
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: QIntValidator
«
Ответ #3 :
Сентября 20, 2021, 19:44 »
Цитата: Bol4onok от Сентября 20, 2021, 17:16
Звучит непонятно
Такие фразы нужно расшифровывать: что именно? Если слово "наследовать" - то бегом в C++, ну и т.д.
Вам повезло, я сам сейчас делаю валидатор под свою задачу, поэтому модифицировал его под ваш пример (см. вложение). Но лучше сразу сделать производный класс от QIntValidator, тогда не нужно в конструкторе создавать объект intValidator, ну а как вызвать метод базового класса, найдете где-нибудь ))
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: QIntValidator
«
Ответ #4 :
Сентября 21, 2021, 09:18 »
Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QIntValidator
«
Ответ #5 :
Сентября 21, 2021, 11:10 »
Цитата: sergek от Сентября 20, 2021, 19:44
Но лучше сразу сделать производный класс от QIntValidator,
С критикой "сестры таланта" согласен, но хотелось бы понять причину. Вроде бы валидатор именно для этого и предназначен, чего это надо наследоваться или вообще соскакивать на др вариант, пусть неплохой ?
Что вообще значит Intermediate? Значение пока не валидно, но может оказаться валидным если юзер продолжит ввод, верно я понимаю? Хорошо, пусть в данном случае он ввел 34. Как он может его "довести до валидности"? Продолжая - никак, только забить 3 или 4. Поясните логику Qt валидатора
Update: немного поразмыслил, выходит Ваш вариант не всегда работает как хотелось бы. Пример: валидный диапазон от 10 до 20. Юзер хочет 15, начинает вводить, нажал 1 - а ему отлуп, невалидно.
Мда, не все так просто
«
Последнее редактирование: Сентября 21, 2021, 12:38 от Igors
»
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: QIntValidator
«
Ответ #6 :
Сентября 21, 2021, 13:18 »
Да, у меня косяк...
spinbox тоже не всегда подойдет - он не позволяет оставить пустое поле. Остается обрабатывать фокус и при Intermediate что-то делать, например, не позволять уйти. Но это такой гимор...
ТС, следите за мыслью? Выкиньте мой вариант на помойку и используйте, как было - QIntValidator. Сразу вспомнился анекдот: "не выделывайтесь, слушайте, как все, полонез Огинского" ))
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QIntValidator
«
Ответ #7 :
Сентября 21, 2021, 13:51 »
Цитата: sergek от Сентября 21, 2021, 13:18
Выкиньте мой вариант на помойку и используйте, как было - QIntValidator.
Зачем так добром разбрасываться? Вариант совсем не плох, по меньшей мере позволяет пресечь максимум. А для конкретного диапазона 1-10 можно и минимум - запретить стартовый ноль.
А проблема "не дать уйти" остается при любом раскладе как видно из примера выше
Записан
Bol4onok
Новичок
Offline
Сообщений: 3
Re: QIntValidator
«
Ответ #8 :
Сентября 22, 2021, 15:45 »
Цитата: __Heaven__ от Сентября 21, 2021, 09:18
Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer
spinbox запрещён, я студент, препод запретил его (=
Записан
8: Undefined index: LANG_NAME
Файл: /var/www/html/Sources/geshi/geshi.php
Строка: 4032