crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Обработчик изменений на всей форме
pers_tmb
  опции профиля:
сообщение 7.6.2012, 15:52
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 7.6.2012
Пользователь №: 3416

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток :)

Я с программированием и с QT в частности пока ещё на Вы, но писать кучу лишнего кода уже лень.
Вообщем по нажатию на одну из кнопок создаётся у меня диалог с кучей полей QLineEdit. Хочется сделать так, чтобы на кнопку OK, привязанную к слоту accept(), можно было нажать только когда все поля заполнены. Сейчас я могу реализовать это только через сигнал textChanged для каждого поля по отдельности.

Но наверняка существует какая-нибудь хитрость, упрощающая задачу... :rolleyes: Подскажите, пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
MoPDoBoPoT
  опции профиля:
сообщение 10.6.2012, 13:34
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Можно написать универсальный класс-обработчик изменения состояний контролов (не только QLineEdit). В конструкторе формы создаётся обработчик, там ему указываются контролы (каким-нибудь перегруженным addWidget()), которые надо проверять при изменении. Для каждого типа виждета существует определённый сигнал, по которому можно узнать об изменении данных в контроле (соответственно, в методе addWidget() привязать сигнал к конкретному слоту, который будет испускать сигнал с булевым значением - признак заполнености контролов). После инициализации контролов и настройки объекта-обработчика, необходимо будет вызвать некую функцию инициализации начального состояния (проверка заполнености контролов). Соответственно, также надо будет соединить сигнал, испускаемый обработчиком, с необходимым слотом (слот изменения доступности кнопки, например).
Также можно для кастомных контролов шаблонный addWidget() сделать, который будет принимать указатель на контрол, сигнатуру сигнала, испускаемого при изменении данных контола, и название метода класса, вызываемого для проверки (или указатель на функцию проверки состояния контрола).
Ещё можно ввести "режимы работы" обработчика (задавать при конструировании объекта):
1. проверка сразу, при изменении данных в контроле (как описано выше);
2. проверка при вызове функции (возвращает признак). Здесь можно незаполненные контролы обводить красной рамкой или выводить сообщения в модальном диалоге о незаполнености конкретных полей (тогда в addWidget() передавать текст с сообщением).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.1.2025, 9:24