Название: Изменение типа сигнала Отправлено: ElderOrb от Июль 15, 2005, 14:29 Возможен ли сабж?.. То есть можно ли из сигнала signal(const QString&) сделать signal(int) или signal() ? Это может понадобиться для реализации, к примеру, следующего:
Имеется виджэт в котором размещены разнообразные контролы (лайнэдиты, комбобоксы и радиобуттоны). Хотелось бы чтобы при изменении значения любого контрола в кэпшене виждэта выставлялся признак модификации. Решение "в лоб" (сигналы textChanged(const QString&) для QLineEdit, editTextChanged(const QString&) для QComboBox и buttonClicked(QAbstractButton*) для группы радиобуттонов подключить к слотам setModifier(const QString&) и setModifier(QAbstractButton*) ) слишком громоздкое. Тут отлично подошёл бы QSignalMapper если бы каждый контрол при своей модификации испускал сигнал одного и того же типа. Проблема в том, что признак модификации QLineEdit-а - сигнал textChanged и сигнал buttonClicked для группы радиобуттонов имеют разные параметры, и "красиво" использовать сигналмэппер не получится. Существует ли какой-нибудь простой способ поменять тип сигнала (с потерей переносимой им ноформации конечно)? Название: Re: Изменение типа сигнала Отправлено: Zmey от Июль 15, 2005, 16:32 Цитата: "ElderOrb" Возможен ли сабж?.. То есть можно ли из сигнала signal(const QString&) сделать signal(int) или signal() ? Это может понадобиться для реализации, к примеру, следующего: Имеется виджэт в котором размещены разнообразные контролы (лайнэдиты, комбобоксы и радиобуттоны). Хотелось бы чтобы при изменении значения любого контрола в кэпшене виждэта выставлялся признак модификации. Решение "в лоб" (сигналы textChanged(const QString&) для QLineEdit, editTextChanged(const QString&) для QComboBox и buttonClicked(QAbstractButton*) для группы радиобуттонов подключить к слотам setModifier(const QString&) и setModifier(QAbstractButton*) ) слишком громоздкое. Тут отлично подошёл бы QSignalMapper если бы каждый контрол при своей модификации испускал сигнал одного и того же типа. Проблема в том, что признак модификации QLineEdit-а - сигнал textChanged и сигнал buttonClicked для группы радиобуттонов имеют разные параметры, и "красиво" использовать сигналмэппер не получится. Существует ли какой-нибудь простой способ поменять тип сигнала (с потерей переносимой им ноформации конечно)? А можешь сделать, чтобы из этих сигналов испускался твой один самодельный сигнал, а потом ты этот сигнал ловишь и... Типа того: connect( aButton, SIGNAL(clicked()), SIGNAL(myUsefulSignal()) ); Название: Изменение типа сигнала Отправлено: ElderOrb от Июль 15, 2005, 16:36 Чего-то в этом духе мне и хотелось бы добиться... Но вот как? Не могу же я подключить сигнал одного типа к сигналу другого?.. Или могу?
Название: Изменение типа сигнала Отправлено: L.Marvell от Июль 15, 2005, 16:56 Цитата: "ElderOrb" Чего-то в этом духе мне и хотелось бы добиться... Но вот как? Не могу же я подключить сигнал одного типа к сигналу другого?.. Или могу? Цитата из книги Jasmin Blanchette, Mark Summerfield (хотя возможно я неправильно понял постановку задачи): "Сигнал может быть подключен к другому сигналу: connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updateRecord(const QString &))); Когда посылается первый сигнал, то вслед за ним подается и второй. С точки зрения программы, соединение типа сигнал-сигнал ничем не отличается от соединения типа сигнал-слот." Название: Изменение типа сигнала Отправлено: ElderOrb от Июль 15, 2005, 17:01 Проблема в том что в моём случае сигналы разных типов... А насколько я знаю подключения вида
connect(sender, SIGNAL(senderSignal(const QString& )), receiver, SLOT(receiverSlot(in))) , (т.е. подключения между сигналами разных типов) невозможны. Название: Изменение типа сигнала Отправлено: KOSchMAR от Июль 15, 2005, 23:46 если с потерей информации, то что мешает использовать SLOT(MyVoidSlot())?
Название: Изменение типа сигнала Отправлено: ElderOrb от Июль 16, 2005, 12:27 действительно ничего! ж) По каким-то причинам я был убеждён что ЛЮБЫЕ соединения между сигналами разных типов невозможны. Оказалось, что
connect(ui.lineEdit, SIGNAL(textChanged( const QString & )), mapper, SLOT(map())); отлично работает!.. Проблема решена и спасибо всем откликнувшимся! Название: Изменение типа сигнала Отправлено: KOSchMAR от Июль 16, 2005, 13:15 Соединяемые сигналы и слоты должны иметь идентичные сигнатуры (т.е. количество и типы входных аргументов):
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)), this, SLOT(processReply(int, const QString &))); Исключение составляет случай, когда сигнал имеет большее число аргументов, чем слот. В этом случае "лишние" аргументы просто не передаются в слот. (это из книги Бланшете "Разработка графического интерфейса с помощью библиотеки Qt3" глава 2.2) |