Russian Qt Forum
Май 10, 2024, 06:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменение значения при передачи от сигнала слоту  (Прочитано 3905 раз)
AAXEE
Гость
« : Ноябрь 08, 2009, 01:25 »

Здравствуйте!
Чтобы объяснить суть моего вопроса приведу простой пример.
Допустим у нас есть QCheckBox и QLineEdit. И требование при поставленной галочке поле доступно для редактирования, а при отсутствии галочки - недоступно.
Решается это очень просто:
Код:
connect( сheckBox , SIGNAL( toggled( bool ) ) , lineEdit , SLOT( readOnly( bool ) ) ) ;
Если же необходимо сделать наоборот( галочка есть - поле недоступно, галочки нет - поле доступно ) простым coonnectом уже не обойдешься. Приходится создавать дополнительный слот.
Хотя понятно, что принципиальных различий в описании первого и второго случая нет, реализации выглядят по-разному.
1. Есть ли какой-то способ в connectе изменить передаваемое значение?
2. Думаю, что такого способа нет, поэтому другой  вопрос: почему бы троллям не сделать что-то вроде
Код:
connect( сheckBox , SIGNAL( toggled( param ) ) , lineEdit , SLOT( readOnly(  not param ) ) ) ; 
?
3. Какое решение в примере идеологически правильное?

Спасибо!
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Ноябрь 08, 2009, 02:14 »

1. Нет
2. Может подойдёт выбор одного из слотов: setEnabled(bool) / setDisabled(bool)

П.С. У QLineEdit слота readOnly(...) не нашёл
Записан

Юра.
AAXEE
Гость
« Ответ #2 : Ноябрь 08, 2009, 10:32 »

setEnabled и setDisabled  в данном случае подходят, но я имел ввиду, конечно, общий случай(например у сигнала параметр х, а у слота х^2)

Цитировать
П.С. У QLineEdit слота readOnly(...) не нашёл
Пример придуманный, поэтому ошибся, но суть не в этом.
Записан
Vexator
Гость
« Ответ #3 : Ноябрь 09, 2009, 04:18 »

вообще было бы не плохо расширить систему сигналов/слотов, добавив туда возможность как задавать простые выражения так и константы
Записан
SASA
Гость
« Ответ #4 : Ноябрь 09, 2009, 23:13 »

A что мешает создать свой "маленький" объект посредник. Определить у него метод, типа invert_connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method), слот sl(bool) и сигнал si(bool). В invert_connec коннектить signal с слотом  sl, а слот method, с сигналом si. В слоте sl испускать сигнал  si с инвернутным сигналом.

Записан
spectre71
Гость
« Ответ #5 : Ноябрь 09, 2009, 23:56 »

вообще было бы не плохо расширить систему сигналов/слотов, добавив туда возможность как задавать простые выражения так и константы

Не имеет смысла!
1) Ситуация очень редкая.
2) Касается только соединенний на уровне дизайнера - всегда можно сделать наследника(либо посредника) со своим слотом, с необходимым преобразованием.
3) Подобные, индивидуальные пожелания будут всегда - за всеми не угнаться
4) Из "кубиков" (в дизайнере) - всего не сделать.
Записан
Vexator
Гость
« Ответ #6 : Ноябрь 10, 2009, 05:44 »

Не имеет смысла!

Ну смысл то имеет, это точно.

вопрос только в целесообразности и сложности реализации
1) да ситуация редкая, но иногда возникает, и приходиться городить лишний код там, где можно было бы обойтись 1 строчкой, а это всегда ПЛОХО
3) это да, прогресс собственно это и есть попытка угнатсья за пожеланиями
4) ну чем больше можно сделать, тем лучше
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 24.