Russian Qt Forum
Ноябрь 24, 2024, 22:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобраться с идеологией слотов-сигналов  (Прочитано 2472 раз)
e-not
Гость
« : Сентябрь 16, 2010, 11:02 »

Здравствуйте. Пытаюсь освоить QT после многих лет Delphi.
Помогите, пожалуйста, разобраться с идеологией слотов-сигналов.
Базовые моменты более-менее понятны, но как реализуется следующее:
К примеру, на форме находятся кнопка, несколько выпадающих списков и надпись.
Как сделать так, чтобы при нажатии кнопки в надписи выводилась
строка типа "В списке 1 выбран элемент A, В списке 2 выбран элемент B ...",
соответственно тому, что выбрано.
Записан
Alex_cs_gsp
Гость
« Ответ #1 : Сентябрь 16, 2010, 11:06 »

Здравствуйте. Пытаюсь освоить QT после многих лет Delphi.
А  С++ пытались освоить?

Вся идеология сводится к соединению сигналов и слотов. Пишите свой класс со своим слотом. Сигнал от кнопки clicked() соединяете с этим слотом. А в самом слоте забирайте из списка то, что там выделено и выводите куда нужно. Но, вообще то, список посылает сигнал, если было изменено выделение, так что кнопка будет лишней.
« Последнее редактирование: Сентябрь 16, 2010, 11:13 от Alex_cs_gsp » Записан
merke
Гость
« Ответ #2 : Сентябрь 16, 2010, 12:17 »

Попытаюсь объяснить Вам. Слот представляет собой что то очень и очень похожее на функцию-член класса. Сам же сигнал он испускается при каком то определенном событии. Давайте сразу возьмем пример из жизни. Вы заходите в комнату там темно, вы нажимаете на включатель - включается лампочка. Теперь включатель - сигнал, а вы инициатор сигнала, лампочка - слот. Сигнал и слот в данном случае связан проводом. Лампочка включится только в том случае если будет нажат включатель.

связь в Qt осуществляется следующим образом
Код:
connect(объект_испускающий_сгнал,SIGNAL(имя_сигнала), класс_где_объявлен_слот, SLOT(имя_слота));

Один сигнал может быть связан с многим числом слотов, как например рубильник может подавать или отключать питание на сеть приборов. Сигнал - рубильник, слоты - приборы. Также множество сигналов могут быть связаны всего лишь с одним слотом.

Сигналы и слоты, позволяют связывать совершенно разные объекты. Это очень удобный и тонкий механизм. Очень легок для понимания.

Разберем ваш пример:

Расположим QPushButton, QLabel, QListWidget.

В конструкторе класса пишем connect(ui->button1, SIGNAL(clicked), this, SLOT(set_to_label()));

Так получается мы тут связали событие нажатия кнопки с функцией set_to_label()

В заголовочном файле класса декларируем слот:

Код:
private slots:

void set_to_label()
{
       ui->label->setText(ui->listWidget->currentItem()->text());
}

Теперь при нажатии на кнопочку в лэйбле будет выведен текст текущего элемента в листвиджете.
Записан
e-not
Гость
« Ответ #3 : Сентябрь 16, 2010, 12:54 »

Спасибо откликнувшимся! Теперь все понятно.
Записан
merke
Гость
« Ответ #4 : Сентябрь 16, 2010, 12:59 »

с тебя пивасик Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.215 секунд. Запросов: 20.