Обработчик изменений на всей форме |
Здравствуйте, гость ( Вход | Регистрация )
Обработчик изменений на всей форме |
pers_tmb |
7.6.2012, 15:52
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 7.6.2012 Пользователь №: 3416 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток
Я с программированием и с QT в частности пока ещё на Вы, но писать кучу лишнего кода уже лень. Вообщем по нажатию на одну из кнопок создаётся у меня диалог с кучей полей QLineEdit. Хочется сделать так, чтобы на кнопку OK, привязанную к слоту accept(), можно было нажать только когда все поля заполнены. Сейчас я могу реализовать это только через сигнал textChanged для каждого поля по отдельности. Но наверняка существует какая-нибудь хитрость, упрощающая задачу... Подскажите, пожалуйста. |
|
|
MoPDoBoPoT |
10.6.2012, 13:34
Сообщение
#2
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Можно написать универсальный класс-обработчик изменения состояний контролов (не только QLineEdit). В конструкторе формы создаётся обработчик, там ему указываются контролы (каким-нибудь перегруженным addWidget()), которые надо проверять при изменении. Для каждого типа виждета существует определённый сигнал, по которому можно узнать об изменении данных в контроле (соответственно, в методе addWidget() привязать сигнал к конкретному слоту, который будет испускать сигнал с булевым значением - признак заполнености контролов). После инициализации контролов и настройки объекта-обработчика, необходимо будет вызвать некую функцию инициализации начального состояния (проверка заполнености контролов). Соответственно, также надо будет соединить сигнал, испускаемый обработчиком, с необходимым слотом (слот изменения доступности кнопки, например).
Также можно для кастомных контролов шаблонный addWidget() сделать, который будет принимать указатель на контрол, сигнатуру сигнала, испускаемого при изменении данных контола, и название метода класса, вызываемого для проверки (или указатель на функцию проверки состояния контрола). Ещё можно ввести "режимы работы" обработчика (задавать при конструировании объекта): 1. проверка сразу, при изменении данных в контроле (как описано выше); 2. проверка при вызове функции (возвращает признак). Здесь можно незаполненные контролы обводить красной рамкой или выводить сообщения в модальном диалоге о незаполнености конкретных полей (тогда в addWidget() передавать текст с сообщением). |
|
|
Текстовая версия | Сейчас: 26.1.2025, 9:24 |