Название: QValidator & QLineEdit Отправлено: 861401 от Февраль 10, 2012, 02:00 Здраствуйте :)
Заранее скажу, что я новичок в программировании и пользуюсь Qt Creator (много где читал, что для создания графического интерфейса он проще всего, но суть топика не в этом :) ) Ситуация такая: у меня есть несколько LineEdit'ов, в которые нужно запретить ввод всех символов, кроме чисел. Погуглив документацию и другие форумы я пришёл к такому решению Код: ui->lineEdit_R1->setValidator(new QDoubleValidator(-999.0,999.0, 2, this)); Проблема заключается в том, что LineEdit'ов мне придётся создать ещё по меньшей мере штук 60. И прописывать для каждого валидатор мне кажется неразумным. Может можно как-нибудь установить валидатор для всех создаваемых объектов класса QLineEdit? Или может ещё какое-нибудь решение есть? Название: Re: QValidator & QLineEdit Отправлено: kambala от Февраль 10, 2012, 05:39 надо унаследоваться от QLineEdit и в конструкторе установить валидатор - тогда все объекты нового типа сразу будут иметь встроенный валидатор.
Код по желанию можно добавить параметры минимума, максимума, шага в конструктор и/или через сеттеры/геттеры, если у лайнэдитов могут быть разные допустимые границы. теперь в коде нужно создавать объекты типа ValidatableLineEdit вместо QLineEdit, а в дизайнере надо преобразовать существующие лайнэдиты в этот новый класс (правой кнопкной на лайнэдит - promote to/преобразовать в). Название: Re: QValidator & QLineEdit Отправлено: 861401 от Февраль 10, 2012, 13:22 kambala, спасибо большое, как раз то что надо :)
Название: Re: QValidator & QLineEdit Отправлено: andrew.k от Февраль 10, 2012, 17:06 Мне кажется ради этого не стоит делать новый класс.
почему в цикле не задать валидатор? Я так понимаю, там штабеля лайнэдитов. Название: Re: QValidator & QLineEdit Отправлено: kambala от Февраль 10, 2012, 17:17 для цикла лайнэдиты ещё придётся в контейнер помещать (копипастная работа), а .ui файл можно в блокноте переправить одной заменой
Название: Re: QValidator & QLineEdit Отправлено: andrew.k от Февраль 10, 2012, 17:54 для цикла лайнэдиты ещё придётся в контейнер помещать (копипастная работа), а .ui файл можно в блокноте переправить одной заменой Ну вообще да. Согласен.Название: Re: QValidator & QLineEdit Отправлено: Igors от Февраль 10, 2012, 18:20 Позвольте, а где же следование принципам ООП? Разве установка диапазона создает "новую сущность" и QLineEdit становится уже чем-то иным? :)
861401 - не воспринимайте это слишком серьезно, предложенное решение вполне нормальное. Вообще какой-то мап (или просто ассоциативный массив) возникают часто. Сегодня видел похожую тему. Если уж "докапываться" то причина в использовании указателей. Автоматизация таких рутинных вещей становится легче если окно умеет выдернуть контрол по ID (номеру). Тогда легко расписать массивчик "ID - диапазон". Ну это если есть желание (и необходимость) копать - а пока нормально и в конструктор добавить. Название: Re: QValidator & QLineEdit Отправлено: BRE от Февраль 10, 2012, 18:27 Позвольте, а где же следование принципам ООП? Разве установка диапазона создает "новую сущность" и QLineEdit становится уже чем-то иным? :) Сущности выделяются для каждой конкретной задачи и в данном случае да, можно считать что QLineEdit становится чем-то другим, а именно NumEdit, например.Была стока для ввода чего попало - стала строкой для ввода чисел в заданном диапазоне. Название: Re: QValidator & QLineEdit Отправлено: iroln от Февраль 10, 2012, 18:55 Надо использовать QDoubleSpinBox вместо QLineEdit+QDoubleValidator, вот и всё. Но это, конечно, не прокатит, если надо вводить, скажем, списки значений через пробел. Хотя разве QDoubleValidator разрешает пробелы?
Название: Re: QValidator & QLineEdit Отправлено: 861401 от Февраль 11, 2012, 03:28 Надо использовать QDoubleSpinBox вместо QLineEdit+QDoubleValidator, вот и всё. Но это, конечно, не прокатит, если надо вводить, скажем, списки значений через пробел. Хотя разве QDoubleValidator разрешает пробелы? QDoubleValidator не даёт вводить пробелы. А про QDoubleSpinBox я не знал, с ним действительно проще. Но зато я узнал для чего надо Promote to :) |