LINUX.ORG.RU

Механизм слотов и сигналов в Qt


0

1

В официальноq документации по Qt пишется что механизм слотов и сигналов более типа-безопасен по сравнению с механизмом обратных сигналов и более гибок. За чего это получается? И можем ли мы с помощью слота передать какие-нибудь данные (data, как например в GTK+ в callback) в обработчик?


В data обычно передают указатель на объект, к которому принадлежит слот, а в Qt на это есть указатель this

anonymous
()
Ответ на: комментарий от anonymous

вы не так поняли наверное меня
допустим в GTK+ у нас кнопка button1 и мы к ней на событие нажатия цепляем функцию but1_cb в которую передаём например структуру p.

g_signal_connect(GTK_OBJECT(button1),«clicked»,GTK_SIGNAL_FUNC(but1_cb),p);

как быть с слотами?

g-71
() автор топика
Ответ на: комментарий от g-71

connect(sender, SIGNAL(some_signal(some_params)), recipient, SLOT(some_slot(some_params)));
В итоге параметры, с которыми вызван сигнал передаютс в слот.

unikoid ★★★
()
Ответ на: комментарий от g-71
connect( action1, SIGNAL( toggled(bool) ) , this, SLOT( slot1(bool) ) );
UVV ★★★★★
()
С параметрами

При соединении сигналов и слотов с передачей параметров следует помнить замечание указанное в описании к QObject::connect(). Т.е. имена аргументов должны быть опущены.

Неправильно:

QObject::connect(scrollBar, SIGNAL(valueChanged(int value)), label, SLOT(setNum(int value)));

Правильно:

QObject::connect(scrollBar, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));

В этом примере сигнал valueChanged() от линейки прокрутки scrollBar соеденяется со слотом setNum() текстовой метки label. Сигнал передает параметр типа int - текущая позиция ползунка. Слот метки имеет такой же тип входного аргумента (сигнатуры сигнала и слота должны всегда совпадать). После соединения этой пары сигнал/слот, при изменении положения ползунка, в текстовой метке будет отбражатся текущая позиция ползунка. 
Chaser_Andrey ★★★★★
()

Такая необходимость возникла, или просто интересно? Мне кажется что раз не сделали такого, значит не нужно. Есть ведь this.

anonymous
()
Ответ на: комментарий от Chaser_Andrey

а в чём тогда лучше типа-безопасность по сравнению с механизмом обратных вызывов?

g-71
() автор топика
Ответ на: комментарий от anonymous

т.е. получается например у меня 4 кнопки. Я «присоединяю» к каждой кнопке slot1(). И я хочу чтобы по нажатию на кнопоку у меня увеличивался её размер. Т.о. я могу писать this->(метод изменения размера) и это будет работать для каждой кнопки ?

g-71
() автор топика
Ответ на: комментарий от namezys

что значит в каком объекте?

просто есть формочка: я туда кладу 4 кнопки, создаю слот pushButton()
захожу в редактирование слотов и сигналов и для каждой кнопки на сигнал clicked() определяют слот pushButton()

просто сейчас нет под рукой Creator'а. Так бы попробовал

и в этом pushButton указатель this что будет обозначить?

g-71
() автор топика
Ответ на: комментарий от g-71

что значит в каком объекте?

Значит, что нужно подучить С++

UVV ★★★★★
()
Ответ на: комментарий от g-71

Слот в классе формы? Сигналы от кнопок ловим?

Очевидно, что в слоте указатель this будет указывать на объект, у которого этот слот вызван. А вот sourceObject (как-то так) тоже можно узнать - он будет указывать на объект, инциирующий вызов слота.

namezys ★★★★
()

> В официальноq документации по Qt пишется что механизм слотов и сигналов более типа-безопасен по сравнению с механизмом обратных сигналов и более гибок.

Тебя жестоко нае..обманули.

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.