The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Qt - SIGNAL & SLOT, !*! siegerstein, 30-Ноя-07, 19:12  [смотреть все]
Привет всем!

Задача состоит в следующем:

При изменении значения регулятора ( slider[ i ] ), нужно вызвать функцию.
Эта задача решается. Но. Ей нужно передать значение i. То есть:

connect ( slider [ i ], SIGNAL ( valueChanged ( int ) ), this, SLOT ( setvol ( int ) ) );

Тут видно, что при сигнале изменения значения регулятора вызывается функция
setvol(), но как ей передать значение i, чтобы к примеру знать какой регулятор подвергся
изменению?

Заранее спасибо за ответ.

  • Qt - SIGNAL & SLOT, !*! siegerstein, 04:07 , 01-Дек-07 (1)
    >[оверквотинг удален]
    >
    >connect ( slider [ i ], SIGNAL ( valueChanged ( int )
    >), this, SLOT ( setvol ( int ) ) );
    >
    >Тут видно, что при сигнале изменения значения регулятора вызывается функция
    >setvol(), но как ей передать значение i, чтобы к примеру знать какой
    >регулятор подвергся
    >изменению?
    >
    >Заранее спасибо за ответ.

    Вроде понял. При помощи emit вполне реально передать что угодно.
    Но опять таки, как перехватить сигнал чтобы вызвать emit?

    emit testFunc ( i );
    connect ( slider [ i ], SIGNAL ( valueChanged ( int ) ), ....... );

    Кто-то знает как это реализовать?

    • Qt - SIGNAL & SLOT, !*! ws, 08:49 , 01-Дек-07 (2)
      • Qt - SIGNAL & SLOT, !*! siegerstein, 10:04 , 01-Дек-07 (3)
        >В слоте используй функцию 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 ) {
        ....
        }

        Спасибо за помощь. Тема закрыта.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру