Привет всем!Задача состоит в следующем:
При изменении значения регулятора ( slider[ i ] ), нужно вызвать функцию.
Эта задача решается. Но. Ей нужно передать значение i. То есть:connect ( slider [ i ], SIGNAL ( valueChanged ( int ) ), this, SLOT ( setvol ( int ) ) );
Тут видно, что при сигнале изменения значения регулятора вызывается функция
setvol(), но как ей передать значение i, чтобы к примеру знать какой регулятор подвергся
изменению?Заранее спасибо за ответ.
>[оверквотинг удален]
>
>connect ( slider [ i ], SIGNAL ( valueChanged ( int )
>), this, SLOT ( setvol ( int ) ) );
>
>Тут видно, что при сигнале изменения значения регулятора вызывается функция
>setvol(), но как ей передать значение i, чтобы к примеру знать какой
>регулятор подвергся
>изменению?
>
>Заранее спасибо за ответ.Вроде понял. При помощи emit вполне реально передать что угодно.
Но опять таки, как перехватить сигнал чтобы вызвать emit?emit testFunc ( i );
connect ( slider [ i ], SIGNAL ( valueChanged ( int ) ), ....... );Кто-то знает как это реализовать?
В слоте используй функцию sender(), что бы узнать - какой объект вызывает слот. А далее бери какие хочешь свойства этого объекта.
>В слоте используй функцию sender(), что бы узнать - какой объект вызывает
>слот. А далее бери какие хочешь свойства этого объекта.Спасибо ws, не представляешь как мне помог.
Я в поиске sender() наткнулся на эту статью:http://qt.osdn.org.ua/signalmapper.html
И сделал с помощью QSignalMapper.
У меня все работает!Вот пример, может кому-то пригодиться:
...
signalMapper = new QSignalMapper(this);
...
for ( int i = 0; i < someVal; ++i ) {
...
slider [ i ] = new QSlider;
...
connect ( slider [ i ], SIGNAL ( valueChanged ( int ) ), lcd [ i ], SLOT ( display ( int ) ) );
connect ( slider [ i ], SIGNAL ( valueChanged ( int ) ), signalMapper, SLOT ( map ( ) ) );
signalMapper -> setMapping ( slider [ i ], i );
connect (signalMapper, SIGNAL ( mapped ( int ) ), this, SLOT ( setvol ( int ) ) );....
// Обрабатываем наше событие:
void MainWindow::setvol ( int sliderId ) {
....
}Спасибо за помощь. Тема закрыта.