Название: передача параметров в слот Отправлено: spigel от Июль 12, 2007, 12:05 для примера:
есть сигнал у кнопки clicked() есть слот у объекта onClick(int) необходимо для каждого соединения передавать свой константный параметр. т.е. использование sender() в этом случае не подходит по многим причинам ( в том числе недоступности объектов в слоте ). известно что при обработке сигнала, передача управления происходит в порядке подключения сигнала к слоту (по номерам) получается что каждый вызов слота индивидуальный и в принципе может содержать индивидуальный аргумент. Вопрос, как это сделать? как при установке связи через функцию connect указать как вызывать слот на этом сигнале? Название: передача параметров в слот Отправлено: WW от Июль 12, 2007, 12:46 Цитировать т.е. использование sender() в этом случае не подходит по многим причинам ( в том числе недоступности объектов в слоте ). Он для этого и сделан, чтобы узнать, кто сгенерировал сигнал. Цитировать известно что при обработке сигнала, передача управления происходит в порядке подключения сигнала к слоту (по номерам) Вот здесь тролли категорически против. они даже утвреждают обратное, что надееться на это ни в коем случае нельзя. Название: передача параметров в слот Отправлено: spigel от Июль 12, 2007, 13:25 да, по sender нужно делать "свои" объекты, которые сумеют вернуть заветный параметр = у них должен быть интерфейс
таким образом надо сделать вроде CMyPushButton, в котором будет getMyID и конечно преобразовать объект sender'a к нужному интерфейсу, но так сделать невозможно = очень велик объем (в моем случае) да, конечно порядок вызова не важен, я на него и не закладываюсь но посмотрев как они вызывают слоты пришел к выводу что для каждой связи строится отдельная конструкция вызова соответственно каждый вызов слота (для одного и того же сигнала) может содержать собственные параметры. Название: передача параметров в слот Отправлено: -=s0L=- от Июль 12, 2007, 15:15 Каждому объекту можно назначить символьное имя. Делай этим кнопкам setObjectName(QString::number(ID)), а потом в слоте sender()->objectName().toInt()
Название: передача параметров в слот Отправлено: spigel от Июль 12, 2007, 16:19 да, спасибо, интересное решение! :-)
Название: передача параметров в слот Отправлено: pastor от Июль 12, 2007, 16:43 Если речь идёт о кнопках, тогда юзай QButtonGroup
Название: передача параметров в слот Отправлено: Вячеслав от Июль 12, 2007, 22:23 Еще вроде как QSignalMapper был ;) ( Название по памяти писал - ногами не бить )
Название: передача параметров в слот Отправлено: spigel от Июль 13, 2007, 08:15 основная идея была передать параметр, с которым вызывать слот по происшествии сигнала. Действительно, если знать от кого пришел сигнал (кнопка, action), то многое решается доп. средствами. setObjectName - опасная функция, т.к. по ней работают некоторые другие методы (например: поиск по имени класса, связывание сигнала и слота по имени). Пока нет решения, приходится идти в обход.
Название: передача параметров в слот Отправлено: Вячеслав от Июль 13, 2007, 09:21 Цитировать The QSignalMapper class bundles signals from identifiable senders. This class collects a set of parameterless signals, and re-emits them with integer, string or widget parameters corresponding to the object that sent the signal. The class supports the mapping of particular strings or integers with particular objects using setMapping(). The objects' signals can then be connected to the map() slot which will emit the mapped() signal with the string or integer associated with the original signalling object. Mappings can be removed later using removeMappings(). Example: Suppose we want to create a custom widget that contains a group of buttons (like a tool palette). One approach is to connect each button's clicked() signal to its own custom slot; but in this example we want to connect all the buttons to a single slot and parameterize the slot by the button that was clicked. Here's the definition of a simple custom widget that has a single signal, clicked(), which is emitted with the text of the button that was clicked: Это не оно случаем ? в смысле решения ? Название: передача параметров в слот Отправлено: pastor от Июль 13, 2007, 09:49 Цитата: "spigel" основная идея была передать параметр, с которым вызывать слот по происшествии сигнала. Действительно, если знать от кого пришел сигнал (кнопка, action), то многое решается доп А конкретнее можно описать. Определить кнопка это или экшн можно и при помощи sender() Код: void SomeClass::someSlot() Можешь глянуть ещё такие методы как Код: bool QObject::inherits ( const char * className ) const Вобще почитать про QMetaObject |