Название: Проверка формы на валидность Отправлено: User162 от Декабрь 19, 2013, 21:06 Всем привет!
Есть некая регистрационная форма (ФИО, адрес и т д ). В ней находится GroupBox. В этом боксе поля: (QLabel) (QLineEdit) ФИО Дата рождения Вес Номер полиса Адрес (QTextEdit) Пол (QRadioButton) Надо сделать проверку, на то что все поля заполнены (не пустые). А напротив пустого поля, подсветить Лэйбл красным цветом. Вот мой код: Код: bool MainWindow::CheckFormValid() в этом коде я проверяю в гроупбоксе все контрлы QLineEdit и сопоставляю номера Лэйблов Делал через дизайнер. Подсветка срабатывает, даже если поле заполнено. Помогите, что то не разберусь! Название: Re: Проверка формы на валидность Отправлено: kibsoft от Декабрь 19, 2013, 21:45 >>Подсветка срабатывает, даже если поле заполнено.
Т.е. вот это условие Код: if (l1[i]->text() == "") Название: Re: Проверка формы на валидность Отправлено: User162 от Декабрь 19, 2013, 21:49 какое поле не заполнено определяется верно, т е условие
Код: if (l1[i]->text() == "") Название: Re: Проверка формы на валидность Отправлено: kibsoft от Декабрь 19, 2013, 22:03 А у вас в групбоксе label'ов такое же количество как и эдитов? Может еще быть такое, что findChildren возвращает в произвольном порядке объекты.
Навскидку, я бы сделал так: 1) Для выравнивания QLabel и QLineEdit использовал бы QFormLayout (в дизайнере он на панели, вместе с остальными) 2) вызывал findChildren<QFormLayout *> 3) получал из объекта QFormLayout эдит и лэйбл используя метод itemAt В этом случае вы точно получите нужные лэйблы и эдиты. Название: Re: Проверка формы на валидность Отправлено: User162 от Декабрь 19, 2013, 22:09 Проверял, если количество эдитов совпадает с количеством лэйблов, и проверил что если лэйблов больше чем эдитов (в моём случае). В коде (в цикле) я считаю сколько эдитов у меня в групбоксе, и полагаю что лэйблов не меньше.
Я записываю компоненты в QList (и лэйблы и эдиты) в надежде обратиться к ним по индексам, а потом просто тупо сравнить. Но не выходит. Такое ощущение что в QList рандомно всё попадает (если вывести в дебаг содержимое, то видно) Название: Re: Проверка формы на валидность Отправлено: Alex Custov от Декабрь 19, 2013, 22:11 Подсветка срабатывает, даже если поле заполнено. Помогите, что то не разберусь! с чего ты взял, что Код: l1[i] Код: l2[i] Название: Re: Проверка формы на валидность Отправлено: User162 от Декабрь 19, 2013, 22:17 Положился на интуицию.... А если честно, то думал по индексам сравнить... Я уж понял что это неверное решение, как будет правильно???
Название: Re: Проверка формы на валидность Отправлено: kibsoft от Декабрь 19, 2013, 22:21 Я выше написал как можно. Может еще кто-то что-нибудь предложит, т.к. я с QtWidgets уже года 2 ничего не делал.
Название: Re: Проверка формы на валидность Отправлено: Bepec от Декабрь 19, 2013, 22:30 Самое простое - назвать их аля label_1 и так далее, добавить в список (как ты делаешь уже) и отсортировать перед использованием :)
Название: Re: Проверка формы на валидность Отправлено: kambala от Декабрь 19, 2013, 22:54 помести свои UI-компоненты в список/словарь сам (в конструкторе например), а не полагайся на findChildren() — тогда порядок будет 100% правильным
Название: Re: Проверка формы на валидность Отправлено: ViTech от Декабрь 20, 2013, 12:26 На всякий случай, вдруг пригодится: у QLabel есть buddy (http://qt-project.org/doc/qt-4.8/qlabel.html#setBuddy), который связывает его с каким-то виджетом. Можно пробегать по всем лейблам и проверять связанные с ним поля.
Название: Re: Проверка формы на валидность Отправлено: User162 от Декабрь 20, 2013, 12:34 Не знаю решена проблема или нет, но решил сделать тест. На форму кинул Групбокс, в него натолкал эдиты и лэйблы, скомпоновал. Далее применил тот код, что выше. И все работает. Единственное что заметил, если удалить один из эдитов, и вставить другой, то порядок нарушится.
Это не есть хорошее решение на мой взгляд. Попробую варианты, которые предложили kibsoft и Bepec. Название: Re: Проверка формы на валидность Отправлено: Igors от Декабрь 20, 2013, 13:23 Самое простое - назвать их аля label_1 и так далее, добавить в список (как ты делаешь уже) и отсортировать перед использованием :) Только не сортировать а просто работать по именамКод А в дызайнере отследить имена Название: Re: Проверка формы на валидность Отправлено: Bepec от Декабрь 20, 2013, 13:26 find затратнее обращения по индексу. Потому лучше сначала сложить и отсортировать, а потом без забот пользоваться. И никакие "левые" едиты мешать не будут.
Название: Re: Проверка формы на валидность Отправлено: Igors от Декабрь 20, 2013, 13:48 find затратнее обращения по индексу. Потому лучше сначала сложить и отсортировать, а потом "Вспомнила баба как девкой была". Плохо когда программист не чувствует машиныНазвание: Re: Проверка формы на валидность Отправлено: ViTech от Декабрь 20, 2013, 22:56 Я бы сделал так: в дизайнере форм в режиме Buddy Editing Mode (http://qt-project.org/doc/qt-4.8/designer-buddy-mode.html) каждому Label поставил в соответствие нужный LineEdit (или еще что надо). И дальше примерно так (псевдокод):
Код
|