Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Bol4onok от Сентябрь 20, 2021, 16:55



Название: QIntValidator
Отправлено: Bol4onok от Сентябрь 20, 2021, 16:55
Здравствуйте, у меня такая проблема, я новичок в Qt, но облазив много сайтов я так и не нашёл решение своей проблемы, у меня есть lineEdit, ввод данных в которой я хочу ограничить до диапазона от 1 до 10, я использую QIntValidator, где задаю значение (1,10), но ставя такой минимум/максимум я могу вводить числа до 99, как мне можно решить это проблему? Я использую такой код:
QValidator *validator = new QIntValidator(1,10). Буду рад любой помощи.


Название: Re: QIntValidator
Отправлено: sergek от Сентябрь 20, 2021, 17:13
Видимо, сделать свой валидатор: наследовать QValidator и определить метод validate. Внутри этого метода использовать QIntValidator(1,10), а для строк, прошедших эту проверку, и выполнять проверку на диапазон 1...10.


Название: Re: QIntValidator
Отправлено: Bol4onok от Сентябрь 20, 2021, 17:16
Звучит непонятно  :o


Название: Re: QIntValidator
Отправлено: sergek от Сентябрь 20, 2021, 19:44
Звучит непонятно  :o
Такие фразы нужно расшифровывать: что именно? Если слово "наследовать" - то бегом в C++, ну и т.д.
Вам повезло, я сам сейчас делаю валидатор под свою задачу, поэтому модифицировал его под ваш пример (см. вложение). Но лучше сразу сделать производный класс от QIntValidator, тогда не нужно в конструкторе создавать объект intValidator, ну а как вызвать метод базового класса, найдете где-нибудь ))


Название: Re: QIntValidator
Отправлено: __Heaven__ от Сентябрь 21, 2021, 09:18
Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer


Название: Re: QIntValidator
Отправлено: Igors от Сентябрь 21, 2021, 11:10
Но лучше сразу сделать производный класс от QIntValidator,
С критикой "сестры таланта" согласен, но хотелось бы понять причину. Вроде бы валидатор именно для этого и предназначен, чего это надо наследоваться или вообще соскакивать на др вариант, пусть неплохой ?

Что вообще значит Intermediate? Значение пока не валидно, но может оказаться валидным если юзер продолжит ввод, верно я понимаю? Хорошо, пусть в данном случае он ввел 34. Как он может его "довести до валидности"? Продолжая - никак, только забить 3 или 4. Поясните логику Qt валидатора

Update: немного поразмыслил, выходит Ваш вариант не всегда работает как хотелось бы. Пример: валидный диапазон от 10 до 20. Юзер хочет 15, начинает вводить, нажал 1 - а ему отлуп, невалидно.

Мда, не все так просто  :)


Название: Re: QIntValidator
Отправлено: sergek от Сентябрь 21, 2021, 13:18
Да, у меня косяк...
spinbox тоже не всегда подойдет - он не позволяет оставить пустое поле. Остается обрабатывать фокус и при Intermediate что-то делать, например, не позволять уйти. Но это такой гимор...
ТС, следите за мыслью? Выкиньте мой вариант на помойку и используйте, как было - QIntValidator. Сразу вспомнился анекдот: "не выделывайтесь, слушайте, как все, полонез Огинского" ))


Название: Re: QIntValidator
Отправлено: Igors от Сентябрь 21, 2021, 13:51
Выкиньте мой вариант на помойку и используйте, как было - QIntValidator.
Зачем так добром разбрасываться? Вариант совсем не плох, по меньшей мере позволяет пресечь максимум. А для конкретного диапазона 1-10 можно и минимум - запретить стартовый ноль.

А проблема "не дать уйти" остается при любом раскладе как видно из примера выше


Название: Re: QIntValidator
Отправлено: Bol4onok от Сентябрь 22, 2021, 15:45
Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer
spinbox запрещён, я студент, препод запретил его (=


Название: Re: QIntValidator
Отправлено: Johnik от Сентябрь 22, 2021, 21:27
Обратите внимание на сигнал
Код
QLineEdit::editingFinished()


Название: Re: QIntValidator
Отправлено: m_ax от Сентябрь 23, 2021, 11:01
Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer
spinbox запрещён, я студент, препод запретил его (=

Ну и шлите на.. такого препода..


Название: Re: QIntValidator
Отправлено: __Heaven__ от Сентябрь 23, 2021, 16:27
Ну и шлите на.. такого препода..

И в армейку топ-топ-топ)


Название: Re: QIntValidator
Отправлено: m_ax от Сентябрь 23, 2021, 20:18
Ну и шлите на.. такого препода..

И в армейку топ-топ-топ)

Ой, ну это такое) Вы не представляете как мы на.. преподов, когда я учился в универе) Мы паспорта подделывали, чтоб наш друг смог в КАИ погступить) Билеты на концерты Киша, Ариии, Чижа.. и всегда пргоходили) Могоу Вам кучу историй рассказать) Были времена, когда у нас в мгозгоах было калёным коаксиальным кабелем выгравено: взломать систему)


Название: Re: QIntValidator
Отправлено: Igors от Сентябрь 24, 2021, 08:46
..препод запретил его (=
И правильно сделал, вникайте, нефиг сачковать