Russian Qt Forum
Ноябрь 22, 2024, 16:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QIntValidator  (Прочитано 4766 раз)
Bol4onok
Новичок

Offline Offline

Сообщений: 3


Просмотр профиля
« : Сентябрь 20, 2021, 16:55 »

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

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #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 Offline

Сообщений: 3


Просмотр профиля
« Ответ #2 : Сентябрь 20, 2021, 17:16 »

Звучит непонятно  Шокированный
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Сентябрь 20, 2021, 19:44 »

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

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Сентябрь 21, 2021, 09:18 »

Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Сентябрь 21, 2021, 11:10 »

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

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

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

Мда, не все так просто  Улыбающийся
« Последнее редактирование: Сентябрь 21, 2021, 12:38 от Igors » Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #6 : Сентябрь 21, 2021, 13:18 »

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

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Сентябрь 21, 2021, 13:51 »

Выкиньте мой вариант на помойку и используйте, как было - QIntValidator.
Зачем так добром разбрасываться? Вариант совсем не плох, по меньшей мере позволяет пресечь максимум. А для конкретного диапазона 1-10 можно и минимум - запретить стартовый ноль.

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

Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #8 : Сентябрь 22, 2021, 15:45 »

Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer
spinbox запрещён, я студент, препод запретил его (=
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #9 : Сентябрь 22, 2021, 21:27 »

Обратите внимание на сигнал
Код
QLineEdit::editingFinished()
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #10 : Сентябрь 23, 2021, 11:01 »

Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer
spinbox запрещён, я студент, препод запретил его (=

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Сентябрь 23, 2021, 16:27 »

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

И в армейку топ-топ-топ)
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #12 : Сентябрь 23, 2021, 20:18 »

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

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

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Сентябрь 24, 2021, 08:46 »

..препод запретил его (=
И правильно сделал, вникайте, нефиг сачковать
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.063 секунд. Запросов: 24.