Assistant
) находим, что в классе QAbstractSlider, потомком которого является QScrollBar, определён сигнал void QAbstractSlider::valueChanged ( int value ) оповещающий об изменении положения ползунка полосы прокрутки. Далее, в описании класса QLabel находим, что изменение текста надписи производится с помощью функции setText(строка) или setNum(число). Тогда вызов метода connect должен выглядеть следующим образом: QObject::connect( scrollBar, // Источник события. SIGNAL(valueChanged(int)), // Сигнал. label, // Объект-приёмник сигнала. SLOT( setNum(int) ) ); // Функция-обработчик. Заметим, что параметрами сигнала и слота являются типы, а не переменные.
Количество параметров слота всегда не больше количества параметров сигнала. Соответствие между ними, как обычно, позиционное: при выполнении программы значением i-го параметра слота становится значение i-го параметра сигнала.
В объявлении класса методы-слоты необходимо указывать в разделе publicslots или private slots. Обычно в программе используются стандартные сигналы, но если требуется определить собственные, то их надо объявить в разделе signals. Например: class MainWondow : public QMainWindow { Q_OBJECT ............. signals: void mySignal(); private slots: void onMySignal(); .............
Сигнал может быть "соединён" с другим сигналом, например: connect( myButton, SIGNAL( clicked() ), this, SIGNAL( buttonClicked() ) );
Один и тот же сигнал можно связать с несколькими слотами и/или другими сигналами. С одним и тем же слотом можно связать несколько сигналов. Можно указать несколько одинаковых "соединений": тогда одно событие вызовет генерацию нескольких сигналов.
Чтобы разорвать связь между сигналом и слотом, используется метод disconnect: bool QObject::disconnect ( const QObject *sender, const char *signal, const QObject *receiver, const char *method ) [static]
В листинге 5 приведён текст небольшой программы, иллюстрирующей принцип обработки нажатия на кнопку (экземпляр класса QPushButton), а на рис. показано, как выглядит окно программы в системе Windows.