Russian Qt Forum
Ноябрь 22, 2024, 16:58
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
QIntValidator
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QIntValidator (Прочитано 4776 раз)
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 запрещён, я студент, препод запретил его (=
Записан
Johnik
Крякер
Offline
Сообщений: 339
Re: QIntValidator
«
Ответ #9 :
Сентябрь 22, 2021, 21:27 »
Обратите внимание на сигнал
Код
QLineEdit::editingFinished()
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: QIntValidator
«
Ответ #10 :
Сентябрь 23, 2021, 11:01 »
Цитата: Bol4onok от Сентябрь 22, 2021, 15:45
Цитата: __Heaven__ от Сентябрь 21, 2021, 09:18
Ещё вариант вместо lineEdit использовать spinbox. Он проще настраивается и через designer
spinbox запрещён, я студент, препод запретил его (=
Ну и шлите на.. такого препода..
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: QIntValidator
«
Ответ #11 :
Сентябрь 23, 2021, 16:27 »
Цитата: m_ax от Сентябрь 23, 2021, 11:01
Ну и шлите на.. такого препода..
И в армейку топ-топ-топ)
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: QIntValidator
«
Ответ #12 :
Сентябрь 23, 2021, 20:18 »
Цитата: __Heaven__ от Сентябрь 23, 2021, 16:27
Цитата: m_ax от Сентябрь 23, 2021, 11:01
Ну и шлите на.. такого препода..
И в армейку топ-топ-топ)
Ой, ну это такое) Вы не представляете как мы на.. преподов, когда я учился в универе) Мы паспорта подделывали, чтоб наш друг смог в КАИ погступить) Билеты на концерты Киша, Ариии, Чижа.. и всегда пргоходили) Могоу Вам кучу историй рассказать) Были времена, когда у нас в мгозгоах было калёным коаксиальным кабелем выгравено: взломать систему)
«
Последнее редактирование: Сентябрь 23, 2021, 22:36 от m_ax
»
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QIntValidator
«
Ответ #13 :
Сентябрь 24, 2021, 08:46 »
Цитата: Bol4onok от Сентябрь 22, 2021, 15:45
..препод запретил его (=
И правильно сделал, вникайте, нефиг сачковать
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...